РЕШЕНО Может библиотеки мешают друг другу?

Тема в разделе "Arduino & Shields", создана пользователем olegoriy, 14 май 2022.

  1. olegoriy

    olegoriy Гик

    Добрый вечер, код ведет себя очень странно, а именно в мониторе порта при нажатии на кнопку пульта постоянно разные значения. Но, если удалить 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();
    }}
     
     
  2. olegoriy

    olegoriy Гик

    Разобрался. Засунул сравнения в функцию, обращаюсь к функции раз в полсекунды. Все заработало)))
     
    arkadyf нравится это.
  3. fogary

    fogary Гик

    Вместо кучи if-ов более удобно и эффективно использовать switch-case.
     
    Airbus нравится это.
  4. olegoriy

    olegoriy Гик

    Как это реализовать? Подскажите примером, а то ифоф уже больше 40 получается.
     
  5. parovoZZ

    parovoZZ Гуру

  6. fogary

    fogary Гик

    Не в качестве примера 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();
    }

    . . .

    }
     
     
    Последнее редактирование: 31 май 2022