Добрый вечер, код ведет себя очень странно, а именно в мониторе порта при нажатии на кнопку пульта постоянно разные значения. Но, если удалить 20 сравнений, те что ниже, работает нормально. Не пойму в чем проблема? Код (C++): #include <FastLED.h> // подключаем библиотеку #define NUM_LEDS 30 // указываем количество светодиодов на ленте #define PIN 2 // указываем пин для подключения ленты CRGB leds[NUM_LEDS]; #include <IRremote.h> IRrecv irrecv(4); decode_results results; long p = 0; long p2 = 0; long i = 1000; long i2 = 200; int red = 255; int green = 255; int blue = 255; int S1 = 2; int S2 = 3; int S3 = 4; int S4 = 6; int z = 0; void setup() { irrecv.enableIRIn(); FastLED.addLeds <WS2811, PIN, GRB>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip); FastLED.setBrightness(160); Serial.begin(9600); } void loop() { if (irrecv.decode(&results)) // если данные пришли выполняем команды { Serial.println(results.value, HEX); // отправляем полученные данные на порт // включаем и выключаем светодиод, в зависимости от полученного сигнала if (results.value == 16750695) { digitalWrite(13, HIGH); } if (results.value == 16746615) { digitalWrite(13, LOW); } irrecv.resume(); // принимаем следующий сигнал на ИК приемнике } if(S1==0){ leds[0] = CRGB(red, blue, blue); leds[1] = CRGB(red, blue, green); leds[2] = CRGB(red, blue, green); leds[3] = CRGB(red, blue, green); leds[4] = CRGB(red, blue, green); leds[5] = CRGB(red, blue, green); leds[6] = CRGB(0, 0, 0); FastLED.show(); } if(S1==1){ leds[0] = CRGB(0, 0, 0); leds[1] = CRGB(0, 0, 0); leds[2] = CRGB(red, blue, green); leds[3] = CRGB(red, blue, green); leds[4] = CRGB(0, 0, 0); leds[5] = CRGB(0, 0, 0); leds[6] = CRGB(0, 0, 0); FastLED.show(); } if(S1==2){ leds[0] = CRGB(0, 0, 0); leds[1] = CRGB(red, blue, green); leds[2] = CRGB(red, blue, green); leds[3] = CRGB(0, 0, 0); leds[4] = CRGB(red, blue, green); leds[5] = CRGB(red, blue, green); leds[6] = CRGB(red, blue, green); FastLED.show(); } if(S1==3){ leds[0] = CRGB(0, 0, 0); leds[1] = CRGB(red, blue, green); leds[2] = CRGB(red, blue, green); leds[3] = CRGB(red, blue, green); leds[4] = CRGB(red, blue, green); leds[5] = CRGB(0, 0, 0); leds[6] = CRGB(red, blue, green); FastLED.show(); } if(S1==4){ leds[0] = CRGB(red, blue, green); leds[1] = CRGB(0, 0, 0); leds[2] = CRGB(red, blue, green); leds[3] = CRGB(red, blue, green); leds[4] = CRGB(0, 0, 0); leds[5] = CRGB(0, 0, 0); leds[6] = CRGB(red, blue, green); FastLED.show(); } if(S1==5){ leds[0] = CRGB(red, blue, green); leds[1] = CRGB(red, blue, green); leds[2] = CRGB(0, 0, 0); leds[3] = CRGB(red, blue, green); leds[4] = CRGB(red, blue, green); leds[5] = CRGB(0, 0, 0); leds[6] = CRGB(red, blue, green); FastLED.show(); } if(S1==6){ leds[0] = CRGB(red, blue, green); leds[1] = CRGB(red, blue, green); leds[2] = CRGB(0, 0, 0); leds[3] = CRGB(red, blue, green); leds[4] = CRGB(red, blue, green); leds[5] = CRGB(red, blue, green); leds[6] = CRGB(red, blue, green); FastLED.show(); } if(S1==7){ leds[0] = CRGB(0, 0, 0); leds[1] = CRGB(red, blue, green); leds[2] = CRGB(red, blue, green); leds[3] = CRGB(red, blue, green); leds[4] = CRGB(0, 0, 0); leds[5] = CRGB(0, 0, 0); leds[6] = CRGB(0, 0, 0); FastLED.show(); } if(S1==8){ leds[0] = CRGB(red, blue, green); leds[1] = CRGB(red, blue, green); leds[2] = CRGB(red, blue, green); leds[3] = CRGB(red, blue, green); leds[4] = CRGB(red, blue, green); leds[5] = CRGB(red, blue, green); leds[6] = CRGB(red, blue, green); FastLED.show(); } if(S1==9){ leds[0] = CRGB(red, blue, green); leds[1] = CRGB(red, blue, green); leds[2] = CRGB(red, blue, green); leds[3] = CRGB(red, blue, green); leds[4] = CRGB(red, blue, green); leds[5] = CRGB(0, 0, 0); leds[6] = CRGB(red, blue, green); FastLED.show(); } if(S2==0){ leds[7] = CRGB(red, blue, green); leds[8] = CRGB(red, blue, green); leds[9] = CRGB(red, blue, green); leds[10] = CRGB(red, blue, green); leds[11] = CRGB(red, blue, green); leds[12] = CRGB(red, blue, green); leds[13] = CRGB(0, 0, 0); FastLED.show(); } if(S2==1){ leds[7] = CRGB(0, 0, 0); leds[8] = CRGB(0, 0, 0); leds[9] = CRGB(red, blue, green); leds[10] = CRGB(red, blue, green); leds[11] = CRGB(0, 0, 0); leds[12] = CRGB(0, 0, 0); leds[13] = CRGB(0, 0, 0); FastLED.show(); } if(S2==2){ leds[7] = CRGB(0, 0, 0); leds[8] = CRGB(red, blue, green); leds[9] = CRGB(red, blue, green); leds[10] = CRGB(0, 0, 0); leds[11] = CRGB(red, blue, green); leds[12] = CRGB(red, blue, green); leds[13] = CRGB(red, blue, green); FastLED.show(); } if(S2==3){ leds[7] = CRGB(0, 0, 0); leds[8] = CRGB(red, blue, green); leds[9] = CRGB(red, blue, green); leds[10] = CRGB(red, blue, green); leds[11] = CRGB(red, blue, green); leds[12] = CRGB(0, 0, 0); leds[13] = CRGB(red, blue, green); FastLED.show(); } if(S2==4){ leds[7] = CRGB(red, blue, green); leds[8] = CRGB(0, 0, 0); leds[9] = CRGB(red, blue, green); leds[10] = CRGB(red, blue, green); leds[11] = CRGB(0, 0, 0); leds[12] = CRGB(0, 0, 0); leds[13] = CRGB(red, blue, green); FastLED.show(); } if(S2==5){ leds[7] = CRGB(red, blue, green); leds[8] = CRGB(red, blue, green); leds[9] = CRGB(0, 0, 0); leds[10] = CRGB(red, blue, green); leds[11] = CRGB(red, blue, green); leds[12] = CRGB(0, 0, 0); leds[13] = CRGB(red, blue, green); FastLED.show(); } if(S2==6){ leds[7] = CRGB(red, blue, green); leds[8] = CRGB(red, blue, green); leds[9] = CRGB(0, 0, 0); leds[10] = CRGB(red, blue, green); leds[11] = CRGB(red, blue, green); leds[12] = CRGB(red, blue, green); leds[13] = CRGB(red, blue, green); FastLED.show(); } if(S2==7){ leds[7] = CRGB(0, 0, 0); leds[8] = CRGB(red, blue, green); leds[9] = CRGB(red, blue, green); leds[10] = CRGB(red, blue, green); leds[11] = CRGB(0, 0, 0); leds[12] = CRGB(0, 0, 0); leds[13] = CRGB(0, 0, 0); FastLED.show(); } if(S2==8){ leds[7] = CRGB(red, blue, green); leds[8] = CRGB(red, blue, green); leds[9] = CRGB(red, blue, green); leds[10] = CRGB(red, blue, green); leds[11] = CRGB(red, blue, green); leds[12] = CRGB(red, blue, green); leds[13] = CRGB(red, blue, green); FastLED.show(); } if(S2==9){ leds[7] = CRGB(red, blue, green); leds[8] = CRGB(red, blue, green); leds[9] = CRGB(red, blue, green); leds[10] = CRGB(red, blue, green); leds[11] = CRGB(red, blue, green); leds[12] = CRGB(0, 0, 0); leds[13] = CRGB(red, blue, green); FastLED.show(); }}
Не в качестве примера switch-case, а в качестве варианта. Код не проверял, так что заранее извиняюсь. Это только фрагмент: Код (C++): . . . byte colorS1[10] = { B00111111, //0 B00001100, //1 B01110110, //2 B01011110, //3 B01001101, //4 B01011011, //5 B01111011, //6 B00001110, //7 B01111111, //8 B01011111 //9 }; . . . void loop() { . . . if ((S1 >= 0) && (S1 <= 9)) { for (byte i = 0; i <= 6; i++) { byte val = (bitRead(colorS1[S1], i) ? 255 : 0); leds[i] = CRGB(val, val, val); } FastLED.show(); } . . . }