Управление пиксильной светодиодной лентой через ИК пульт

Тема в разделе "Arduino & Shields", создана пользователем resident82, 28 апр 2016.

Метки:
  1. resident82

    resident82 Нуб

    Здравствуйте!
    Подскажите пожалуйста в чем дело. Хочу ик-пультом управлять эффектами на ленте. По отдельности ик приемник принимает стабильные значения кнопок, но если включить в loop() функцию анимации ленты, то на каждую кнопку пульта при нажатии приходят каждый раз разные значения, что делает невозможным их обработку
    Код (C++):

    #include "FastLED.h"
    #include <IRremote.h>
    #define LED_COUNT 31
    #define LED_PIN 3
    #define RECV_PIN 11

    struct CRGB leds[LED_COUNT];

    uint8_t hue = 29;
    int del = 20;
    byte idex = 255;
    byte meteorLength = 30;

    IRrecv irrecv(RECV_PIN);
    decode_results results;

    void setup() {
      delay(2000);
      LEDS.addLeds<WS2812B, LED_PIN, GRB>(leds, LED_COUNT);
      LEDS.setBrightness(200);

      Serial.begin(9600);
      irrecv.enableIRIn();
    }

    void loop(){
    irControll();
    meteorShower();
    }

    void irControll() {
      if (irrecv.decode(&results)) {
      Serial.println(results.value, HEX);

      switch ( results.value ) {
      case 0xF700FF:
      del +=10;
      break;
      case 0xFF02FD:
      del -=10;
      break;
      }
      irrecv.resume();
      }
    }

    void meteorShower(){
      // код анимации светодиодов
      delay(del);
    }
     
     
    Последнее редактирование: 28 апр 2016
  2. resident82

    resident82 Нуб

    разобрался, пульт конфликтовал с библиотекой fastLed, нужно было разделить обработку сигнала на ленту и от ик приемника
    Код (C++):
    void loop(){

      if ( irrecv.decode( &results ) )
      {
        irControll();
      }
      if ( irrecv.isIdle() )
      {
         meteorShower();
      }
    }