Заголовок темы должен отражать содержимое. Отредактируй или ветка будет удалена
Помогите пожалуйста, у меня есть код для того чтоб переключать динамические эффекты на адр с ик пульта, но почему то он постоянно зацикливается и не реагирует на другие кнопки. Как избавиться от зацикливания?
C++:
#include "IRLremote.h"
#define pinIR 2
CHashIR IRLremote;
uint32_t IRdata;
#define NUM_LEDS 300
#include "FastLED.h"
#define PIN 6
CRGB leds[NUM_LEDS];
byte counter;
int thisdelay = 20;
int idex = 0;
int bouncedirection = 0;
#define BUTT_1 0xEE708BAD
#define BUTT_2 0x38ADB6AD
int mode = 0;
bool ir_flag = false;
void setup() {
FastLED.addLeds<WS2812B, PIN, GRB>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip );
FastLED.setBrightness(50);
pinMode(LED_BUILTIN, OUTPUT);
Serial.begin(9600);
IRLremote.begin(pinIR);
}
void loop() {
if (IRLremote.available()) {
auto data = IRLremote.read();
IRdata = data.command;
ir_flag = true;
}
if (ir_flag) { // если данные пришли
switch (IRdata) {
case BUTT_1: mode = 1;
break;
case BUTT_2: mode = 2;
break;
}
}
if(mode == 1){
decodeIR();
Serial.println("1");
}
if(mode == 2){
color_bounce();
Serial.println("2");
}
}
// определяем значение нажатой клавиши
void decodeIR() {
Serial.println(mode);
for (int i = 0; i < NUM_LEDS; i++ ) { // от 0 до первой трети
leds[i] = CHSV(counter + i * 2, 255, 255); // HSV. Увеличивать HUE (цвет)
// умножение i уменьшает шаг радуги
}
counter++; // counter меняется от 0 до 255 (тип данных byte)
FastLED.show();
delay(5);
}
void color_bounce() { //-m5-BOUNCE COLOR (SINGLE LED)
if (bouncedirection == 0) {
idex = idex + 1;
if (idex == NUM_LEDS) {
bouncedirection = 1;
idex = idex - 1;
}
}
if (bouncedirection == 1) {
idex = idex - 1;
if (idex == 0) {
bouncedirection = 0;
}
}
for (int i = 0; i < NUM_LEDS; i++ ) {
if (i == idex) {
leds[i] = CHSV(thishue, thissat, 255);
}
else {
leds[i] = CHSV(0, 0, 0);
}
}
LEDS.show();
delay(thisdelay);
}