Плавающий магнитный переключатель прерывает atmega328p и RN2483 отправляет данные
Это было так просто в моем представлении, но на самом деле это не так. У меня есть поплавковый выключатель, который поднимается, когда вода плавает. Поэтому я подключаю выключатель к выводу INT0 микроконтроллера. Поэтому, когда вода не плавает, все в порядке. Когда вода плавает, я отправляю данные. Я объявляю прерывание следующим образом:
attachInterrupt (digitalPinToInterrupt (switch), float, RISING);
Где находится поплавок
void float()
{
detachInterrupt(0);
digitalWrite (LED, HIGH);
txReturn = myRN.txCnf("1");
}
И мой основной цикл
attachInterrupt (digitalPinToInterrupt (BUTTON), switchPressed, RISING);
digitalWrite (LED, LOW);
LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF);
Я не могу понять, почему мой светодиод не переходит в состояние LOW и почему мое прерывание бесполезно после первого успешного раза. Я знаю, что должен делать процедуры прерываний короткими и txReturn.txCnf("1");
я не знаю, но я не могу понять, где моя логика неверна.
@alexisicte, 👍0
Обсуждение1 ответ
Лучший ответ:
float
уже определен для числа с плавающей точкой, поэтому вы не можете использовать его для своей функции, которая определяет, когда датчик плавает на воде. Попробуйте назвать его как-то иначе.
Кроме того, вместо отсоединения и повторного присоединения прерывания используйте конечный автомат. Когда прерывание срабатывает, вы сможете запустить другой код в основном цикле.
unsigned int state;
void setup(){
state=1;
attachInterrupt(0,changestate,RISING);
}
void loop(){
switch (state) {
case 1: // сделать что-то
// добавьте код здесь
break;
case 2: // сделать что-то еще
// добавьте код здесь
break;
}
}
void changestate(){
if(state==1){state=2;} // прерывание изменяет состояние
}
Хорошо, ваш подход кажется более разумным и эффективным. Я попробую., @alexisicte
- Отправка последовательных данных в прерывании
- Прерывание сравнения Timer2 не работает должным образом
- Светодиод не мигает - Arduino UNO+WiFi R3 ATmega328P+Плата ESP8266
- 24/14 секундный таймер обратного отсчета или часы для кнопки запуска/остановки баскетбольного мяча плохо реагируют
- ATmega328P - проблема с использованием таймера 2 для генерации тона
- Точность синхронизации Arduino nano
- Интервальный таймер на Arduino: Сомнения по поводу библиотеки TimerOne
- Таймер 1 COMPA ISR - поведение по умолчанию?
txCnf сам может зависеть от прерываний. Поэтому ваш код зависнет. Установите логический флаг в процедуре прерывания. В цикле, если флаг установлен, отправьте данные и очистите прерывание., @Gerben
поплавковый выключатель, который поднимается
.... что вы имеете в виду подподнимается
? .... выключатели обычно открываются или закрываются, @jsotola