Заголовок должен отражать суть темы. Переформулируй или тема будет удалена.
Имеется код для ИК приемника. Каждая кнопка на пульте ик отвечает за отдельный режим светодиода. 1 - мигание, 2 - плавное затухание/зажигание, 3 плавное зажигание. Так вот, режимы почему то переключаются только в такой последовательности 1 - 2 - 3 и кода доходит до 3 режима, с него нельзя переключится на другой рандомный. В программирование я новичок, помогите пожалуйста, заранее спасибо.
C++:
#include <IRremote.h>
int RECV_PIN = 6;
IRrecv irrecv(RECV_PIN);
decode_results results;
int LED = 5;
int ledstate = LOW;
bool ledblink = false;
bool ledfading = false;
bool automat = false;
int val = 0;
int dir = true;
void setup() {
Serial.begin(9600);
irrecv.enableIRIn();
pinMode(LED, OUTPUT);
}
void loop() {
if (irrecv.decode(&results)) {
switch (results.value) {
case 0xFFA25D: // режим 1
ledblink = !ledblink;
break;
case 0xFF629D: // режим 2
ledfading = !ledfading;
break;
case 0xFFE21D: // режим 3
automat = !automat;
break;
}
Serial.println(results.value, HEX);
irrecv.resume();
}
if (ledblink) {
Flashled();
}
if (ledfading) {
Fading();
}
if (automat) {
Automatled();
}
}
void Flashled() {
static unsigned long lasttime = 0;
if (millis() - lasttime > 500) {
lasttime = millis();
if (ledstate == LOW) {
ledstate = HIGH;
}
else ledstate = LOW;
digitalWrite(LED, ledstate);
}
}
void Fading() {
static unsigned long lasttime = 0;
if (millis() - lasttime > 10) {
lasttime = millis();
if (dir == 1)val++;
else val--;
if (val >= 255 || val <= 0) dir = !dir;
analogWrite(LED, val);
}
}
void Automatled() {
analogWrite(LED, (millis() / 10) % 256);
}