Я работаю над проектом освещения Arduino, использующим светодиоды RGB для создания настраиваемых цветов. Я использую библиотеку IRremote для изменения «режимов» с помощью светодиодов.
Вот моя программа:
#include <IRremote.h>
const int RECV_PIN = 7;
IRrecv irrecv(RECV_PIN);
decode_results results;
int redpin = 9;
int greenpin = 10;
int bluepin = 5;
void setup(){
Serial.begin(9600);
irrecv.enableIRIn();
irrecv.blink13(true);
pinMode(redpin, OUTPUT);
pinMode(greenpin, OUTPUT);
pinMode(bluepin, OUTPUT);
}
void loop(){
if (irrecv.decode(&results)){
Serial.println("Before it checks for signal");
if (results.value == 0xFFE21D) { //'TITLE' button
Serial.println("'TITLE' signal detected, before fade starts");
//Fades through colors
int i;
//green to red
for (i = 0; i < 255; i++) {
analogWrite(redpin, i);
analogWrite(greenpin, 255 - i);
analogWrite(bluepin, 0);
delay(1);
Serial.println("Green to red");
}
//red to blue
for (i = 0; i < 255; i++) {
analogWrite(redpin, 255 - i);
analogWrite(greenpin, 0);
analogWrite(bluepin, i);
delay(1);
Serial.println("Red to blue");
}
//blue to green
for (i = 0; i < 255; i++) {
analogWrite(redpin, 0);
analogWrite(greenpin, i);
analogWrite(bluepin, 255 - i);
delay(1);
Serial.println("Blue to green");
}
}
if (results.value == 0xFFD22D) { //'MENU' button
Serial.println("'MENU' button detected");
//LED red
analogWrite(redpin, 255);
analogWrite(greenpin, 0);
analogWrite(bluepin, 0);
}
if (results.value == 0xFF52AD) { //'ON/OFF' button
Serial.println("'STOP' button detected");
//Stops
analogWrite(redpin, 0);
analogWrite(greenpin, 0);
analogWrite(bluepin, 0);
Serial.println("After LED stops");
}
Serial.println("After program");
irrecv.resume();
}
}
Внутри void loop()
у меня есть три if()
заявления. Первый проверяет, нажата ли определенная кнопка на пульте дистанционного управления, и индикатор гаснет с зеленого на красный, с синего на зеленый (это выполняется только один раз, но это проблема для другого потока).
Второй оператор if()
проверяет, не нажата ли другая кнопка, и светодиод горит красным. Я планирую иметь несколько из них для разных цветов.
Третий оператор if()
проверяет наличие кнопки ON / OFF и выключает светодиод.
Я могу переключаться между ними. Проблема в том, что как только первый оператор if()
выполняется и светодиод гаснет, я не могу переключиться ни на один из других операторов, пока он не закончится.
Я знаю, что после выполнения первого оператора он не проверяет сигналы, пока не выполнит его, но я не могу придумать, как это сделать. Любая помощь приветствуется!