Здравствуйте подскажите как сделать прерывание по концу приёма с уарта. Надо для организации приёма данных с пульта используя библиотеку IREMOTE.h. Не могу понять как это осуществить.
Дядя Витя - объясни мне тогда как организовать - вот крутится цикл - и чтобы выйти из него или перейти по программе мне надо нажать заранее запрограммированную кнопку на пульте? Неужели - подпрограммы не надо? if ( irrecv.decode( &results )) { // если данные пришли switch ( results.value ) { case 0xB3D4B87F: digitalWrite( 13, HIGH ); break; case 0x44490A7B: digitalWrite( 13, LOW ); break; } irrecv.resume(); // принимаем следующую команду }
Почему светодиод не откликается пока идёт цикл? int m = 0; void loop() { if ( irrecv.decode( &results )) { // если данные пришли switch ( results.value ) { case 0xB3D4B87F: digitalWrite( 13, HIGH ); break; case 0x44490A7B: digitalWrite( 13, LOW ); break; } irrecv.resume(); // принимаем следующую команду } while(m < 100){ m+=1; delay(300); Serial.println(m); } }
Ну по-хорошему не следует писать функции, которые блокируют всю остальную программу на 30 секунд. Если никак, то делать прерывания по таймеру для обработки важных задач. Но не по уарту.
Дядя Вить - а если на Уно 1 таймер занят библиотекой для светодиодов, 2 таймер это для пульта, 0 таймер для прерываний - как быть?
https://github.com/DetSimen/Arduino_TimerList небольшое описание небольшой примерчег Код (C++): #include "TTimerList.h" extern TTimerList TimerList; THandle hGreenLed; // Handle добавляемого счетчика для его последующей идентификации uint8_t greenLedPin = 13; void tmrGreenLed(void){ static bool ledState=true; // состояние светодиода digitalWrite(greenLedPin, ledState); // вывести состояние в светодиод ledState = !ledState; // инвертировать состояние } void setup(){ pinMode(greenLedPin, OUTPUT); hGreenLed = TimerList.Add(1000,tmrGreenLed); // функция tmrGreenLed будет вызываться раз в 1000 мс. } void loop(){}
Да! Чтоб выйти из цикла по нажатию кнопки пульта внутри цикла также нужно организовать проверку сигнала с иктприемника!
не надо. Реально в коде сообщения №5 цикл вообще не нужен, тогда и проблема "выйти из цикла" исчезнет сама собой. дядяВитя еще в марте написал - "по хорошему не надо писать циклы на 30 секунд". И именно это было главным в его ответе, а не прерывания.