Всем привет. Кому не впадлу можете помочь. Есть два светодиода нужно с пульта включать и выключать каждый (это я понял как сделать), а так же что бы они моргали. Не понимаю как сделать цикл в цикле, а именно (в моем скетче) почему когда входит в цикл while (внутри него команда irrecv.resume(); прописана) - ардуино перестает работать на прием ик сигнала и соответсвенно после самого первого нажатия на кнопку пульта (0xDA28F020) 1-й светодиод моргает вечно и ардуино больше не реагирует на нажатия. Скетч Код (C++): #include "IRremote.h" IRrecv irrecv(2); decode_results results; int led1=0; int led2=0; void setup() { pinMode(3,OUTPUT); pinMode(9,OUTPUT); Serial.begin(9600); irrecv.enableIRIn(); } void loop() { if ( irrecv.decode( &results )) { Serial.println(results.value, HEX); if (results.value==0xDA28F020 &&led1==0) {;led1=1;results.value=0; {while(led1==1) {irrecv.resume(); digitalWrite( 3, HIGH ); delay(1000); digitalWrite( 3, LOW ); delay(1000);irrecv.resume(); if (results.value==0xDA28F020 &&led1==1){ digitalWrite( 3, LOW );led1=0;results.value=0; }}}} if (results.value==0xDCB93B93 &&led2==0){ digitalWrite( 9, HIGH );led2=1;results.value=0; } if (results.value==0xDCB93B93 &&led2==1){ digitalWrite( 9, LOW );led2=0;results.value=0; } irrecv.resume(); } }
Всем привет, решил не создавать новую тему. Схема: 2 светодиода, ик приемник. Проблема: очень плохо вкл/выкл светодиоды - надо жать много раз кнопки. Пробовал: другой пульт, подключал пин (ик приемника) OUT как с резистором так и без - не помогло. Поэтому проблема скорей всего в скетче. Код (C++): #include "IRremote.h" IRrecv irrecv(2); // указываем вывод, к которому подключен приемник decode_results results; int led1 = 3; int led2 = 5; int a1 = 0; int a2 = 0; void setup() { pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); Serial.begin(9600); // скорость порта irrecv.enableIRIn(); // запускаем прием } void loop() { //1 LED if (a1 == 0) { if ( irrecv.decode( &results )) { Serial.println(results.value); if (results.value == 0xFFA25D) {a1 = 1;} irrecv.resume();}} if ( irrecv.decode( &results )) { Serial.println(results.value); if (results.value == 0xFFA25D&&a1 == 1) {a1 = 0;} irrecv.resume();} if (a1 == 1) {digitalWrite( led1, HIGH ); delay(500); digitalWrite( led1, LOW ); delay(500);} if (a1 == 0) {digitalWrite( led1, LOW);} //2 LED if (a2 == 0) { if ( irrecv.decode( &results )) { Serial.println(results.value); if (results.value == 0xFF629D) {a2 = 1;} irrecv.resume();}} if ( irrecv.decode( &results )) { Serial.println(results.value); if (results.value == 0xFF629D&&a2 == 1) {a2 = 0;} irrecv.resume();} if (a2 == 1) {digitalWrite( led2, HIGH ); delay(50); digitalWrite( led2, LOW ); delay(500);} if (a2 == 0) {digitalWrite( led2, LOW);} }
так неудивительно. надо операторы delay() убирать из кода, у вас все время программа проводит в них, а пока исполняется delay() - коды с пульта не принимаются Переписывайте код на миллис