Нужна помощ с irremote

Тема в разделе "Arduino & Shields", создана пользователем pitrus, 26 май 2020.

  1. pitrus

    pitrus Нуб

    на строил под свои нужды скеч и обарудование но когда переделал его под управление с ик пульта, столкнулся с проблеммой. запросы остаются в results.value.
    после чего при попытке настройки часов он мне значения начинает листать с огромной скорастью вместо того чтоб добовлять по одному. если кто знает как исправить подскажите плиз вот мой скетч

    Код (C++):
    #include <IRremote.h>
    #include <iarduino_RTC.h>
    #include <FastLED.h>
    #include <OneWire.h>
    #include <DallasTemperature.h>

    #define ONE_WIRE_BUS 2      
    #define NUM_LEDS 86         //Your number of leds
    #define LED_TYPE WS2812B     //Your chip in led-strip
    #define COLOR_ORDER GRB      //Type of led-strip
    #define BRIGHTNESS 150      //Brigghtness for led-strip
    #define LED_PIN 9            //Logic pin for led-strip
    #define max_bright 255      
    #define min_bright 10      
    #define bright_constant 150



    IRrecv irrecv(4); // указываем вывод, к которому подключен приемник
    decode_results results;

    CRGB leds[NUM_LEDS];
    iarduino_RTC time(RTC_DS3231); //Your time-module(DS1302, DS1307, DS3231)
    OneWire oneWire(ONE_WIRE_BUS);
    DallasTemperature sensors(&oneWire);

    byte digits[12][21] = {{0,0,0, 1,1,1, 1,1,1, 1,1,1, 1,1,1, 1,1,1, 1,1,1},  // Digit 0
                           {0,0,0, 1,1,1, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 1,1,1},   // Digit 1
                           {1,1,1, 0,0,0, 1,1,1, 1,1,1, 0,0,0, 1,1,1, 1,1,1},   // Digit 2
                           {1,1,1, 0,0,0, 1,1,1, 1,1,1, 1,1,1, 1,1,1, 0,0,0},   // Digit 3
                           {1,1,1, 1,1,1, 0,0,0, 1,1,1, 1,1,1, 0,0,0, 0,0,0},   // Digit 4
                           {1,1,1, 1,1,1, 1,1,1, 0,0,0, 1,1,1, 1,1,1, 0,0,0},   // Digit 5
                           {1,1,1, 1,1,1, 1,1,1, 0,0,0, 1,1,1, 1,1,1, 1,1,1},   // Digit 6
                           {0,0,0, 0,0,0, 1,1,1, 1,1,1, 1,1,1, 0,0,0, 0,0,0},   // Digit 7
                           {1,1,1, 1,1,1, 1,1,1, 1,1,1, 1,1,1, 1,1,1, 1,1,1},   // Digit 8
                           {1,1,1, 1,1,1, 1,1,1, 0,0,0, 1,1,1, 1,1,1, 1,1,1},   // Digit 9
                           {1,1,1, 1,1,1, 1,1,1, 1,1,1, 0,0,0, 0,0,0, 0,0,0},   // Digit *0
                           {1,1,1, 1,1,1, 1,1,1, 0,0,0, 0,0,0, 0,0,0, 0,0,0}};  // Digit C

    bool TempShow=true;
    bool LedSettings= false;
    bool Dot = true;
    int last_digit = 86;
    long ledColor = CRGB::Red;
    long ColorTable[16] = {
      CRGB::Amethyst,
      CRGB::Aqua,
      CRGB::Red,
      CRGB::Chartreuse,
      CRGB::DarkGreen,
      CRGB::DarkMagenta,
      CRGB::DarkOrange,
      CRGB::DeepPink,
      CRGB::Fuchsia,
      CRGB::Gold,
      CRGB::GreenYellow,
      CRGB::LightCoral,
      CRGB::Tomato,
      CRGB::Salmon,
      CRGB::Red,
      CRGB::Orchid
    };

    void setup()
    {
      Serial.begin(9600); // выставляем скорость COM порта
      irrecv.enableIRIn(); // запускаем прием
        sensors.begin();
        delay(300);
        time.begin();
        FastLED.addLeds<WS2812B, LED_PIN, RGB>(leds, NUM_LEDS);
        FastLED.setBrightness(BRIGHTNESS);
       // pinMode(13, OUTPUT);          
       // pinMode(7, INPUT_PULLUP); //Turn Off/On running leds
       // pinMode(4, INPUT_PULLUP); //Change minutes
       // pinMode(5, INPUT_PULLUP); //Change hours
     

    }

    void BrightnessCheck() {
        const byte irbutton = 1;                 // light sensor pin
        const byte brightnessLow = 10;            // Low brightness value
        const byte brightnessHigh = 255;          // High brightness value
        const byte brightnessMidl = 100;          // High brightness value

        if (results.value == 16756815) {
          LEDS.setBrightness(brightnessHigh);
              irrecv.resume(); // принимаем следующую команду
                              }
            if (results.value == 16750695) {
          LEDS.setBrightness(brightnessMidl);
              irrecv.resume(); // принимаем следующую команду
                              }
        if (results.value == 16738455){
          LEDS.setBrightness(brightnessLow);
              irrecv.resume(); // принимаем следующую команду
             }
    }

    int Get_Time() {
      time.gettime();
      byte hour = time.Hours;
      byte minute = time.minutes;
      byte second = time.seconds;
      if (second % 2 == 0) {Dot = true;}
      else {Dot = false;};
      return (hour * 100 + minute);
    };
    void TimeToArray() {
    int Now = Get_Time();
    int cursor = 86;

      if (Dot) {
        leds[42] = ledColor;  //LED flashing
        leds[43] = ledColor;
      }else {
        leds[42] = 0x000000;
        leds[43] = 0x000000;
      };

      for (int i = 1; i <= 4; i++) {
        int digit = Now % 10;
        if (i == 1) {    
          cursor = 0;
          for (int k = 0; k <= 20; k++) {
            if (digits[digit][k] == 1) {
              leds[cursor] = ledColor;
            }
            else if (digits[digit][k] == 0) {
              leds[cursor] = 0x000000;
            };
            cursor ++;
          };

          if (digit != last_digit)
             {if(LedSettings == 1){};
              ledColor = ColorTable[random(16)];
             }
            last_digit = digit;
        }
        else if (i == 2) {
          cursor = 21;
          for (int k = 0; k <= 20; k++) {
           if (digits[digit][k] == 1) {
              leds[cursor] = ledColor;
            }
            else if (digits[digit][k] == 0) {
              leds[cursor] = 0x000000;
            };
           cursor ++;
          };
        }
        else if (i == 3) {
        cursor = 44;
          for (int k = 0; k <= 20; k++) {
            if (digits[digit][k] == 1) {
              leds[cursor] = ledColor;
            }
           else if (digits[digit][k] == 0) {
              leds[cursor] = 0x000000;
            };
            cursor ++;
          };
        }
        else if (i == 4) {
         cursor = 65;
         for (int k = 0; k <= 20; k++) {
            if (digits[digit][k] == 1) {
              leds[cursor] = ledColor;
            }
            else if (digits[digit][k] == 0) {
              leds[cursor] = 0x000000;
            };
            cursor ++;
          };
        };
          Now /= 10;
        };
      };
    void TimeChange(){
        time.gettime();
        int SysHour = time.Hours;
        int SysMin = time.minutes;
      //  bool ChHourSys = !digitalRead(5);
       
            if (results.value == 16753245) {
            if(SysHour<23){
              SysHour++;
              time.settime(-1,-1,SysHour,-1,-1,-1,-1);  // 0  сек, 51 мин, 21 час, 27, октября, 2015 года, вторник
                  irrecv.resume(); // принимаем следующую команду
            }else{
              SysHour=0;
              time.settime(-1,-1,SysHour,-1,-1,-1,-1);  // 0  сек, 51 мин, 21 час, 27, октября, 2015 года, вторник
            }

           }
       // bool ChMinSys = !digitalRead(4);
                if (results.value == 16769565) {
            if(SysMin<59){
              SysMin++;
              time.settime(-1,SysMin,-1,-1,-1,-1,-1);  // 0  сек, 51 мин, 21 час, 27, октября, 2015 года, вторник
                  irrecv.resume(); // принимаем следующую команду
            }else{
              SysMin=0;
              time.settime(-1,SysMin,-1,-1,-1,-1,-1);  // 0  сек, 51 мин, 21 час, 27, октября, 2015 года, вторник
            };

            };


    }

    void TempToArray(){
      if (time.seconds < 20 ) { ////////////////////////////////////////////////////////////////////
        TempShow = false;
        return;
      } else {
      if (time.seconds > 20 ) {
      TempShow = true;
      delay(3000);
    sensors.requestTemperatures();
    float cel = sensors.getTempCByIndex(0);
    cel = cel*100+150;
    int celsius = trunc(cel);
      int cursor = 86;                     // last led number
       
        leds[42]=ledColor;
        leds[43]=0x000000;
         
      for(int i=1;i<=4;i++){
        int digit = celsius % 10;           // get last digit in time
        if (i==1){

          cursor = 0;    
          for(int k=0; k<=20;k++){
            if (digits[10][k]== 1){leds[cursor]=ledColor;}
             else if (digits[10][k]==0){leds[cursor]=0x000000;};
             cursor ++;
            };
        }
        else if (i==2){
          cursor =21;  
          for(int k=0; k<=20;k++){      
            if (digits[digit][k]== 1){leds[cursor]=ledColor;}
             else if (digits[digit][k]==0){leds[cursor]=0x000000;};
             cursor ++;
            };
          }
        else if (i==3){
          cursor =44;
          for(int k=0; k<=20;k++){
            if (digits[digit][k]== 1){leds[cursor]=ledColor;}
             else if (digits[digit][k]==0){leds[cursor]=0x000000;};
             cursor ++;
            };
          }
        else if (i==4){
          cursor =65;
          for(int k=0; k<=20;k++){
            if (digits[digit][k]== 1){leds[cursor]=ledColor;}
             else if (digits[digit][k]==0){leds[cursor]=0x000000;};
             cursor ++;
            };
          }
        celsius /= 10;
      };
      };
      };
    }

    void loop() {
      {
      if ( irrecv.decode( &results )) { // если данные пришли
        Serial.println( results.value ); // печатаем данные
        irrecv.resume(); // принимаем следующую команду
      }

    BrightnessCheck();  // Check brightness
    TimeChange();

    TimeToArray();      // Get leds array with required configuration
    TempToArray();
    FastLED.show();     // Display leds array

    }}
     
  2. b707

    b707 Гуру

    изучайте флаги :)
     
  3. KindMan

    KindMan Гик

    Работаете с приёмом ИК не правильно. Вот вы приняли сигнал - if ( irrecv.decode( &results )) и внутри этого блока и разбираете, какую именно кнопку нажали. Не надо в каждую функцию пихать results.value == {} irrecv.resume();
    И получается, что вы нажали кнопку, пусть даже случайно, и у вас поменялся час/минута. Как-то не дружелюбно получается.
     
  4. pitrus

    pitrus Нуб

    аа понял что вы ввиду имеите. я это уже исправил. просто думал что он мне этой коммандой обнулит значение в results.value.
    насчет флагов я тоже в курсе но с ними возни много мне кажется. мне бы results.value обнулить но как это сделать не могу найти пока
     
  5. pitrus

    pitrus Нуб

    а насчет флагов я просто пока не вьеду как этим можно флагами управлять. когда мне параметр обнулить требуется, я конечно не программист но скрипт прочитать сумею и переделать под свои нужды но в данном случае чтото я не пойму что с results.value сделать
     
  6. b707

    b707 Гуру

    нет, похоже не поняли. прочитайте еще раз первую фразу ответа Kindman
    Он вам советует обрабатывать команды с пульта сразу, как получили, а не тащить их по всем коду.

    У вас главная проблема в том. что вы взяли чужой код. где не было IR - и прилепили его как бы "сбоку", как изолентой примотали.
    Получилась ерунда.

    Вместо того чтоб добавлять команды с пульта в кучу процедур - напишите одну специальную процедуру для работы с IR-пультом, где разом обрабатывайте все команды - и на смену цвета. и на яркость. и на настройку часов. Тогда вам и флаги не понадобятся. и results.value не нужно будет обнулять вовсе
     
  7. KindMan

    KindMan Гик

    Вам кажется. Старайтесь делать всё правильно сразу, иначе потом переписывать всё заново придется.
    Тут всё просто - Нажали кнопку "яркость большая" Взвели флаг БОЛЬШАЯ ЯРКОСТЬ, и в программе проверяете, есть флаг - выполнили нужную функцию, сбросили флаг. И так со всем остальным.
     
  8. pitrus

    pitrus Нуб

    ну пищу для размышления вы мне подкинули буду пробывать чтото с этим сделать. спасибо.как что получится отпишу
     
  9. pitrus

    pitrus Нуб

    я снова тут. вот вобщем доработал все вроди работает но проблемма одна осталась. пульт надо направлять ровненько на приемник иначе принимает какуюто билибирду тоесть савсем левые значения. есть способ с этим бароться?
    вот последняя версия

    Код (C++):

    #include <IRremote.h>
    #include <iarduino_RTC.h>
    #include <FastLED.h>
    #include <OneWire.h>
    #include <DallasTemperature.h>

    #define ONE_WIRE_BUS 2      
    #define NUM_LEDS 86         //Your number of leds
    #define LED_TYPE WS2812B     //Your chip in led-strip
    #define COLOR_ORDER GRB      //Type of led-strip
    #define BRIGHTNESS 150      //Brigghtness for led-strip
    #define LED_PIN 9            //Logic pin for led-strip
    #define max_bright 255      
    #define min_bright 10      
    #define bright_constant 150

    IRrecv irrecv(4);
    decode_results results;
    CRGB leds[NUM_LEDS];
    iarduino_RTC time(RTC_DS3231);
    OneWire oneWire(ONE_WIRE_BUS);
    DallasTemperature sensors(&oneWire);
    byte digits[12][21] = {{0,0,0, 1,1,1, 1,1,1, 1,1,1, 1,1,1, 1,1,1, 1,1,1},  // Digit 0
                           {0,0,0, 1,1,1, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 1,1,1},   // Digit 1
                           {1,1,1, 0,0,0, 1,1,1, 1,1,1, 0,0,0, 1,1,1, 1,1,1},   // Digit 2
                           {1,1,1, 0,0,0, 1,1,1, 1,1,1, 1,1,1, 1,1,1, 0,0,0},   // Digit 3
                           {1,1,1, 1,1,1, 0,0,0, 1,1,1, 1,1,1, 0,0,0, 0,0,0},   // Digit 4
                           {1,1,1, 1,1,1, 1,1,1, 0,0,0, 1,1,1, 1,1,1, 0,0,0},   // Digit 5
                           {1,1,1, 1,1,1, 1,1,1, 0,0,0, 1,1,1, 1,1,1, 1,1,1},   // Digit 6
                           {0,0,0, 0,0,0, 1,1,1, 1,1,1, 1,1,1, 0,0,0, 0,0,0},   // Digit 7
                           {1,1,1, 1,1,1, 1,1,1, 1,1,1, 1,1,1, 1,1,1, 1,1,1},   // Digit 8
                           {1,1,1, 1,1,1, 1,1,1, 0,0,0, 1,1,1, 1,1,1, 1,1,1},   // Digit 9
                           {1,1,1, 1,1,1, 1,1,1, 1,1,1, 0,0,0, 0,0,0, 0,0,0},   // Digit *0
                           {1,1,1, 1,1,1, 1,1,1, 0,0,0, 0,0,0, 0,0,0, 0,0,0}};  // Digit C

    byte digits2[12][21] = {{0,0,0, 1,1,1, 1,1,1, 1,1,1, 1,1,1, 1,1,1, 1,1,1},  // Digit 0
                           {0,0,0, 0,0,0, 0,0,0, 1,1,1, 1,1,1, 0,0,0, 0,0,0},   // Digit 1
                           {1,1,1, 0,0,0, 1,1,1, 1,1,1, 0,0,0, 1,1,1, 1,1,1},   // Digit 2
                           {1,1,1, 0,0,0, 1,1,1, 1,1,1, 1,1,1, 1,1,1, 0,0,0},   // Digit 3
                           {1,1,1, 1,1,1, 0,0,0, 1,1,1, 1,1,1, 0,0,0, 0,0,0},   // Digit 4
                           {1,1,1, 1,1,1, 1,1,1, 0,0,0, 1,1,1, 1,1,1, 0,0,0},   // Digit 5
                           {1,1,1, 1,1,1, 1,1,1, 0,0,0, 1,1,1, 1,1,1, 1,1,1},   // Digit 6
                           {0,0,0, 0,0,0, 1,1,1, 1,1,1, 1,1,1, 0,0,0, 0,0,0},   // Digit 7
                           {1,1,1, 1,1,1, 1,1,1, 1,1,1, 1,1,1, 1,1,1, 1,1,1},   // Digit 8
                           {1,1,1, 1,1,1, 1,1,1, 0,0,0, 1,1,1, 1,1,1, 1,1,1},   // Digit 9
                           {1,1,1, 1,1,1, 1,1,1, 1,1,1, 0,0,0, 0,0,0, 0,0,0},   // Digit *0
                           {1,1,1, 1,1,1, 1,1,1, 0,0,0, 0,0,0, 0,0,0, 0,0,0}};  // Digit C
    bool TempShow=true;
    bool LedSettings= true;
    bool Dot = true;
    int last_digit = 86;
    long ledColor = CRGB::Red;
    int celcall = 150;
    long ColorTable[16] = {
      CRGB::Amethyst,
      CRGB::Aqua,
      CRGB::Red,
      CRGB::Chartreuse,
      CRGB::DarkGreen,
      CRGB::DarkMagenta,
      CRGB::DarkOrange,
      CRGB::DeepPink,
      CRGB::Fuchsia,
      CRGB::Gold,
      CRGB::GreenYellow,
      CRGB::LightCoral,
      CRGB::Tomato,
      CRGB::Salmon,
      CRGB::Red,
      CRGB::Orchid
    };
    void setup()
    {
    Serial.begin(9600);
        irrecv.enableIRIn();
        sensors.begin();
        time.begin();
        FastLED.addLeds<WS2812B, LED_PIN, RGB>(leds, NUM_LEDS);
        FastLED.setBrightness(BRIGHTNESS);
    }
    void IrControl() {
        time.gettime();
        int SysHour = time.Hours;
        int SysMin = time.minutes;
     
        const byte brightnessLow = 10;            // Low brightness value
        const byte brightnessHigh = 255;          // High brightness value
        const byte brightnessMidl = 100;          // midl brightness value
     
     

      if ( irrecv.decode( &results )) { // если данные пришли
          Serial.println(results.value,HEX);
        switch ( results.value ) {
        case 0x807F48B7:
              LEDS.setBrightness(brightnessHigh);   // High brightness value
            break;
        case 0x807F708F:
            LEDS.setBrightness(brightnessMidl);     // midl brightness value
            break;
        case 0x807F50AF:
            LEDS.setBrightness(brightnessLow);      // Low brightness value
            break;
        case 0x807F00FF:                                //hour +
            if(SysHour<23){
              SysHour++;
              time.settime(-1,-1,SysHour,-1,-1,-1,-1);
                  irrecv.resume();
            }else{
              SysHour=0;
              time.settime(-1,-1,SysHour,-1,-1,-1,-1);
            }
            break;
        case 0x807F20DF:                                //hour -
            if(SysHour<23){
              SysHour--;
              time.settime(-1,-1,SysHour,-1,-1,-1,-1);  
                  irrecv.resume();
            }else{
              SysHour=0;
              time.settime(-1,-1,SysHour,-1,-1,-1,-1);  
            }
            break;
        case 0x807F40BF:                                //min +
            if(SysMin<59){
              SysMin++;
              time.settime(-1,SysMin,-1,-1,-1,-1,-1);  
                  irrecv.resume();
            }else{
              SysMin=0;
              time.settime(-1,SysMin,-1,-1,-1,-1,-1);  
            };
            break;
        case 0x807F609F:                                //min -
            if(SysMin<59){
              SysMin--;
              time.settime(-1,SysMin,-1,-1,-1,-1,-1);  
                  irrecv.resume();
            }else{
              SysMin=0;
              time.settime(-1,SysMin,-1,-1,-1,-1,-1);  
            };
            break;
      case 0x807F08F7:                //temp -
             celcall = celcall-10;
            break;
      case 0x807F30CF:                //temp +
             celcall = celcall+10;
            break;
      case 0x807F10EF:                //temp +
             ledColor = ColorTable[random(16)];
            break;
        }  
        irrecv.resume();
      }
    }
    int Get_Time() {
      time.gettime();
      byte hour = time.Hours;
      byte minute = time.minutes;
      byte second = time.seconds;
      if (second % 2 == 0) {Dot = true;}
      else {Dot = false;};
      return (hour * 100 + minute);
    };
    void TimeToArray() {
    int Now = Get_Time();
    int cursor = 86;

      if (Dot) {
        leds[42] = ledColor;  //LED flashing
        leds[43] = ledColor;
      }else {
        leds[42] = 0x000000;
        leds[43] = 0x000000;
      };

      for (int i = 1; i <= 4; i++) {
        int digit = Now % 10;
        if (i == 1) {    
          cursor = 0;
          for (int k = 0; k <= 20; k++) {
            if (digits2[digit][k] == 1) {
              leds[cursor] = ledColor;
            }
            else if (digits2[digit][k] == 0) {
              leds[cursor] = 0x000000;
            };
            cursor ++;
          };
        }
        else if (i == 2) {
          cursor = 21;
          for (int k = 0; k <= 20; k++) {
           if (digits[digit][k] == 1) {
              leds[cursor] = ledColor;
            }
            else if (digits[digit][k] == 0) {
              leds[cursor] = 0x000000;
            };
           cursor ++;
          };
        }
        else if (i == 3) {
        cursor = 44;
          for (int k = 0; k <= 20; k++) {
            if (digits2[digit][k] == 1) {
              leds[cursor] = ledColor;
            }
           else if (digits2[digit][k] == 0) {
              leds[cursor] = 0x000000;
            };
            cursor ++;
          };
        }
        else if (i == 4) {
         cursor = 65;
         for (int k = 0; k <= 20; k++) {
            if (digits[digit][k] == 1) {
              leds[cursor] = ledColor;
            }
            else if (digits[digit][k] == 0) {
              leds[cursor] = 0x000000;
            };
            cursor ++;
          };
        };
          Now /= 10;
        };
      };

    void TempToArray(){
      if (time.seconds < 20 ) { ////////////////////////////////////////////////////////////////////
        TempShow = false;
        return;
      } else {
      if (time.seconds > 20 ) {
      TempShow = true;
    sensors.requestTemperatures();
    float cel = sensors.getTempCByIndex(0);

    cel = cel*100+celcall;
    int celsius = trunc(cel);
      int cursor = 86;                     // last led number
       
        leds[42]=ledColor;
        leds[43]=0x000000;
         
      for(int i=1;i<=4;i++){
        int digit = celsius % 10;           // get last digit in time
        if (i==1){

          cursor = 0;    
          for(int k=0; k<=20;k++){
            if (digits2[10][k]== 1){leds[cursor]=ledColor;}
             else if (digits2[10][k]==0){leds[cursor]=0x000000;};
             cursor ++;
            };
        }
        else if (i==2){
          cursor =21;  
          for(int k=0; k<=20;k++){      
            if (digits[digit][k]== 1){leds[cursor]=ledColor;}
             else if (digits[digit][k]==0){leds[cursor]=0x000000;};
             cursor ++;
            };
          }
        else if (i==3){
          cursor =44;
          for(int k=0; k<=20;k++){
            if (digits2[digit][k]== 1){leds[cursor]=ledColor;}
             else if (digits2[digit][k]==0){leds[cursor]=0x000000;};
             cursor ++;
            };
          }
        else if (i==4){
          cursor =65;
          for(int k=0; k<=20;k++){
            if (digits[digit][k]== 1){leds[cursor]=ledColor;}
             else if (digits[digit][k]==0){leds[cursor]=0x000000;};
             cursor ++;
            };
          }
        celsius /= 10;
      };
      };
      };
    }
    void loop() {
    IrControl();  //
    TimeToArray();      // Get leds array with required configuration
    TempToArray();
    FastLED.show();     // Display leds array
    }
     
  10. b707

    b707 Гуру

    дело, думаю. не в направлении, а в том что пока происходит вывод на ленту. сигнал на IR приниматся не будет или принимается с ошибками.
    А вывод на ленту у вас шарашит так часто. как только может ардуина. То есть реально приемнику IR не всегда удается вклинится между посылками данных на диоды

    Думаю. вам надо вызывать FastLED.show(); только тогда. когда картинка на экране обновилась.
     
  11. pitrus

    pitrus Нуб

    ну хорошо вот смотрите
    Код (C++):
    14:31:08.724 -> 252D06EB
    14:31:08.826 -> FFFFFFFF
    14:31:08.927 -> FFFFFFFF
    14:31:09.063 -> D0C9E18
    14:31:09.164 -> FFFFFFFF
    14:31:09.297 -> F162FE05
    14:31:09.500 -> 807E21B
    14:31:09.769 -> DF255B8A
    14:31:10.243 -> 81FD
    14:31:10.445 -> F09E1B5F
    14:31:10.613 -> F5C6AB20
    14:31:10.814 -> B7740418
    14:31:10.984 -> 944B2FAE
    14:31:11.187 -> A1D734AE
    14:31:11.354 -> F000CD6C
    14:31:11.557 -> 5F0B6031
    14:31:11.758 -> 5B758CB0
    14:31:11.961 -> DF1B54D4
    14:31:12.130 -> 81FC
    14:31:12.332 -> 59D82508
    14:31:12.501 -> B0F9ECFA
     
    это значения нажатия одной и тойже книпки на пульте. причем действительное значение вот это 807E21B

    может я приемник ни на тот пин посадил или почему он так глючить может?
     
  12. KindMan

    KindMan Гик

    Загрузите библиотечный тестовый пример от irremote и посмотрите как будет работать там.
    У меня один пульт Самсунг от старого телевизора себя ведёт так. Все остальные даже с отражением нормально работают.
     
  13. b707

    b707 Гуру

    В любом случае дергать диоды десятки раз в секунду совершенно бестолку. Это надо переписывать.
    В описании библиотеки IRremote.h сразу указано. что она не будет правильно работать одновременно с адресными диодами:

    IR does not work right when I use Neopixels (aka WS2811/WS2812/WS2812B)