Собираем контроллер адресной светодиодной ленты на Ардуино с ик приемником.     


Схема подключения Ардуино к ленте и модулю ик приемника, блок питания на 5 вольт.


Подключение ленты на 5 вольт в автомобиле.


Подключение ленты на 12 вольт в автомобиле.



Видео про данный контроллер и способы подключения лент в авто.

Скетч для Ардуино.

#include "FastLED.h"             // Подключаем библиотеку FastLED.
#include <IRremote.h>            // Подключаем библиотеку IRremote.
#define LED          50          // Количество светодиодов или микросхем в ленте.
#define DATA_PIN     12          // Пин Ардуино под ленту.
#define BUTT_M 0xFFA25D          // 1 Кнопки пульта.
#define BUTT_T 0xFF629D          // 2
#define BUTT_K 0xFFE21D          // 3
#define BUTT_S 0xFF22DD          // 4
#define BUTT_R 0xFF02FD          // 5
#define BUTT_D 0xFFC23D          // 6
#define BUTT_J 0xFFE01F          // 7
#define BUTT_B 0xFFA857          // 8
#define BUTT_F 0xFF906F          // 9
#define BUTT_G 0xFF6897          // *
#define BUTT_X 0xFF9867          // 0
#define BUTT_Z 0xFFB04F          // #
#define BUTT_L 0xFF18E7          // ВЕРХ
#define BUTT_W 0xFF10EF          // ЛЕВО
#define BUTT_A 0xFF38C7          // ОК
#define BUTT_O 0xFF5AA5          // ПРАВО
#define BUTT_V 0xFF4AB5          // НИЗ
#define BRIGHTNESS               // Яркость.
int numberRandom ;               // Переменная для случайных чисел.
int retardSpeed ;                // Переменная для замедления скорости.
int speedDelay ;                 // Переменная для регулировки скорости.
int tuningBrig ;                 // Переменная для регулировки яркости.
byte colorChange ;               // Переменная для цвета.
IRrecv irrecv   ( 3 );           // Пин Ардуино под ИК приемник.
decode_results  results;         // Декодируем информацию с пульта в переменную results 
CRGB leds[LED];                  // Количество светодиодов  в переменной LED равно определению LED
//-----------------------------------------------------------------------------------------------------------------------------------------
void setup() {                                        // Функция настройки.
  Serial.begin(9600);                                 // Скорость монитора порта.
  irrecv.enableIRIn();                                // Включаем считывание ИК пульта.
  speedDelay = 200;                                   // Устанавливаем скорость эффектов. ( 90 - 1000 )
  FastLED.addLeds<TM1829, DATA_PIN, BRG>(leds, LED);  // Лента, настройка цветов, если не совпадают RGB RBG GRB GBR BRG BGR
  FastLED.setBrightness(255);                         // Устанавливаем яркость ленты. ( 0 - 255 )
  LEDS.showColor(CRGB(255, 255, 255));                // Включаем белый на всей ленте. (красный,зеленый,синий)
  delay(1000);                                        // Ждем секунду.
  LEDS.showColor(CRGB(255, 0, 0));                    // Включаем красный на всей ленте. (красный,зеленый,синий)
  delay(1000);                                        // Ждем секунду.
  LEDS.showColor(CRGB(0, 255, 0));                    // Включаем зеленый на всей ленте. (красный,зеленый,синий)
  delay(1000);                                        // Ждем секунду.
  LEDS.showColor(CRGB(0, 0, 255));                    // Включаем синий на всей ленте. (красный,зеленый,синий)
}
//-----------------------------------------------------------------------------------------------------------------------------------------
void loop() {                                         // Функция цикл.
  if (irrecv.decode(&results)) {                      // Считываем данные с пульта.
    Serial.println(results.value, HEX );              // Выводим код пульта в монитор порта.
label_x :                                             // Метка для выхода из эффектов.
    //-------------------------------------------------------Лево "СКОРОСТЬ УБАВИТЬ"-----------------------------------------------------------
    if (results.value == BUTT_W) {                    // Если  значение результата считывания = определению.
      leds[0] = CRGB::Blue;                           // 0 светодиод включить синий
      FastLED.show();                                 // Передать на ленту.
      speedDelay = speedDelay + 50;                   // Увеличивать задержку с шагом 50.
      speedDelay = constrain (speedDelay, 80, 1000);  // Ограничение регулировки скорости.
      delay(200);                                     // Задержка 200 милисекунд.
      Serial.println(speedDelay);                     // Выводим в монитор порта скорость.
      leds[0] = CRGB::Black;                          // 0 светодиод выключить
      FastLED.show();                                 // Демонстрируем на ленте.
    }
    //-----------------------------------------------------Право "СКОРОСТЬ ПРИБАВИТЬ".---------------------------------------------------------
    if (results.value == BUTT_O) {                    // Если  значение результата считывания = определению.
      leds[0] = CRGB::Red;                            // Включить нулевой красный светодиод.
      FastLED.show();                                 // Передать на ленту.
      speedDelay = speedDelay - 50;                   // Уменьшать задержку с шагом 50.
      speedDelay = constrain (speedDelay, 80, 1000);  // Ограничение регулировки скорости.
      delay(200);                                     // Задержка 200 милисекунд.
      Serial.println(speedDelay);                     // Выводим в монитор порта скорость.
      leds[0] = CRGB::Black;                          // Выключить нулевой светодиод.
      FastLED.show();                                 // Демонстрируем на ленте.
    }
    //------------------------------------------------------Верх "ЯРКОСТЬ ПРИБАВИТЬ"-----------------------------------------------------------
    if (results.value == BUTT_L) {                    // Если  значение результата считывания = определению.
      tuningBrig = tuningBrig + 20;                   // Увеличивать яркость с шагом 20
      tuningBrig  = constrain (tuningBrig, 5, 255);   // Ограничение регулировки яркости.
      leds[0] = CRGB::Green;                          // 0 светодиод включить зеленый
      FastLED.setBrightness(tuningBrig);              // Установить яркость с числом.
      Serial.println(tuningBrig);                     // Выводим в монитор порта яркость.
      FastLED.show();                                 // Демонстрируем на ленте.
    }
    //------------------------------------------------------Низ "ЯРКОСТЬ УБАВИТЬ" -------------------------------------------------------------
    if (results.value == BUTT_V) {                    // Если  значение результата считывания = определению.
      tuningBrig = tuningBrig - 20;                   // Уменьшать яркость с шагом 20
      tuningBrig  = constrain (tuningBrig, 5, 255);   // Ограничение регулировки яркости.
      leds[0] = CRGB::Green;                          // 0 светодиод включить зеленый
      FastLED.setBrightness(tuningBrig);              // Установить яркость с числом.
      FastLED.show();                                 // Демонстрируем на ленте.
      Serial.println(tuningBrig);                     // Выводим в монитор порта яркость.
    }
    //------------------------------------------------------1 "СПЯЩИЙ РЕЖИМ"(выключение светодиодов)-------------------------------------------
    if (results.value == BUTT_M) {                    // Если  значение результата считывания = определению.
      for (int i = 0; i < LED; i++) {                 // Цикл заполнения ленты.
        leds[i] = CRGB::Black;                        // Цвет для ленты черный (выключено).
        FastLED.show();                               // Демонстрируем на ленте.
      }
    }
    //-----------------------------------------------------2 "БЕЛЫЙ"---------------------------------------------------------------------------
    if (results.value == BUTT_T) {                    // Если  значение результата считывания = определению.
      for (int i = 0; i < LED; i++) {                 // Цикл заполнения ленты.
        leds[i] = CRGB::White;                        // Цвет для ленты белый.(Blue,Green,Red,Violet,Yellow,Purple,Gold,Brown,Orange)
        FastLED.show();                               // Демонстрируем на ленте.
      }
    }
    //------------------------------------------------------3 "СМЕНА ЦВЕТОВ" ------------------------------------------------------------------
    if (results.value == BUTT_K ) {                   // Если  значение результата считывания = определению.
      static uint8_t hue = 0;                         // Статическая пременная
      for (int i = 0; i < LED; i++) {                 // Цикл заполнения ленты.
        leds[i] = CHSV(hue++, 255, 255);              // Перебор цвета ленты с шагом LED.
        FastLED.show();                               // Демонстрируем на ленте.
      }
    }
    //-----------------------------------------------------4 "ПЕТАРДА"-------------------------------------------------------------------------
    if (results.value == BUTT_S) {                    // Если  значение результата считывания = определению.
label_a:                                              // Метка "а"
      for (int a = 0 ; a < 500 ; a++) {               // Цикл от 0 до 500 оборотов с шагом +1  , займет примерно ? минут
        delay(speedDelay);                            // Задержка с регулировкой скорости.
        if (results.value == BUTT_A)goto label_x;     // Выход из цикла.
        for (int i = 0; i < LED; i++) {               // Цикл заполнения ленты.
          leds[i] = CRGB::White;                      // Бегущий светодиод красим в белый.
          FastLED.show();                             // Демонстрируем на ленте.
          delay(speedDelay);                          // Задержка с регулировкой скорости.
          if (results.value == BUTT_A)goto label_x;   // Выход из цикла.
          leds[i] = CRGB::Black;                      // Цвет для ленты черный (выключено).
        }
        for (int e = 0 ; e < 1000 ; e++) {            // Цикл от 0 до 1000 оборотов с шагом +1
          numberRandom = random(0, LED);              // Переменную numberRandom изменять случайно от 0 до количества светодиодов.
          static uint8_t hue = 0;                     // Статическая пременная
          for (int i = 0; i < LED; i++) {             // Цикл заполнения ленты.
            leds[i] = CHSV(hue = hue + 5, 255, 255);  // Перебор цвета светодиодов.
            leds[numberRandom] = CRGB::White;         // Случайный светодиод зажечь белым
          }
          FastLED.show();                             // Демонстрируем на ленте.
          delay(5);                                   // Задержка.
        }
        FastLED.clear();                              // Очистить ленту.
      }
      goto label_b;                                   // Перейти на метку "b"
    }
    //------------------------------------------------------5 "ЦВЕТНОЙ ДОЖДЬ" -----------------------------------------------------------------
    if (results.value == BUTT_R) {                    // Если  значение результата считывания = определению.
label_b:                                              // Метка "b"
      for (int i = 0 ; i < 10000 ; i++) {             // Цикл на 10000 оборотов , займет примерно 30 минут
        numberRandom = random(0, LED);                // Переменную numberRandom изменять случайно от 0 до количества светодиодов.
        leds[numberRandom] = CHSV(colorChange + i * 8, 255, 255); // Случайный светодиод расскрасить.
        colorChange = colorChange + 1;                // Менять переменную цвета с шагом +1
        FastLED.show();                               // Демонстрируем на ленте.
        delay(speedDelay);                            // Задержка с регулировкой скорости.
        if (results.value == BUTT_A)goto label_x;     // Если  значение результата считывания = определению выход из цикла на метку х
      }
      if (results.value == BUTT_A)goto label_x;       // Если  значение результата считывания = определению выход из цикла на метку х
      FastLED.clear();                                // Очистить ленту.
      goto label_c;                                   // Перейти на метку "c"
    }
    //-------------------------------------------------- 6 "ПОЛЗУЩИЙ ЦВЕТ".--------------------------------------------------------------------
    if (results.value == BUTT_D) {                    // Если  значение результата считывания = определению
label_c:                                              // Метка "c"
      for (int i = 0 ; i < 1000 ; i++) {               // Цикл от 0 до 1000 оборотов с шагом +1   , займет примерно ? минут 
        for (int i = 0; i < LED; i++) {               // Цикл от 0 до переменной LED оборотов с шагом +1
          static uint8_t hue = 0;                     // Статическая пременная
          leds[i] = CHSV(hue++, 255, 255);            // Перебор цвета светодиодов. (цвет, температура, яркость)
          FastLED.show();                             // Демонстрируем на ленте.
          delay(speedDelay);                          // Задержка с регулировкой скорости.
          if (results.value == BUTT_A)goto label_x;   // Если  значение результата считывания = определению выход из цикла на метку х
        }
        for (int i = (LED) - 1; i >= 0; i--) {        // Цикл заполнения ленты против стрелки.
          static uint8_t hue = 0;                     // Статическая пременная
          leds[i] = CHSV(hue = hue + 4, 255, 255);    // Перебор цвета светодиодов.
          FastLED.show();                             // Демонстрируем на ленте.
          delay(speedDelay);                          // Задержка с регулировкой скорости.
          if (results.value == BUTT_A)goto label_x;   // Выход из цикла на метку х
        }
      }
      FastLED.clear();                                // Очистить ленту.
      goto label_r;                                   // Перейти на метку "d"
    }
    //------------------------------------------ * "ЦВЕТНОЙ СТРОБОСКОП".-----------------------------------------------------------------------
    if (results.value == BUTT_G) {                    // Если  значение результата считывания = определению
      for (int i = 0 ; i < 32500 ; i++) {             // Цикл от 0 до 32500 оборотов с шагом +1 
        for (int i = 0; i < LED; i = i + 1) {         // Цикл от 0 до переменной LED оборотов с шагом +1
          static uint8_t hue = 0;                     // Статическая пременная
          leds[i] = CHSV(hue++, 255, 255);            // Перебор цвета светодиодов. (цвет, температура, яркость)

        }
        FastLED.show();                               // Демонстрируем на ленте.
        delay(speedDelay);                            // Задержка с регулировкой скорости.
        if (results.value == BUTT_A)goto label_x;     // Если  значение результата считывания = определению выход из цикла на метку х
      }
      if (results.value == BUTT_A)goto label_x;       // Если  значение результата считывания = определению выход из цикла на метку х
      FastLED.clear();                                // Очистить ленту.
      goto label_a;                                   // Перейти на метку "а"
    }
    //------------------------------------------------# "СТРОБОСКОП"---------------------------------------------------------------------------
    if (results.value == BUTT_Z) {                    //  Если  значение результата считывания = определению
      for (int i = 0 ; i < 32500 ; i++) {             // Цикл от 0 до 32500 оборотов с шагом +1
        LEDS.showColor(CRGB(255, 255, 255));          // Включаем белый на всей ленте. (красный,зеленый,синий)
        delay(speedDelay);                            // Задержка с регулировкой скорости.(можно добавить -30)

        FastLED.show();                               // Демонстрируем на ленте.
        LEDS.showColor(CRGB(0, 0, 0));                // Включаем черный(выключаем)на всей ленте. (красный,зеленый,синий)
        delay(speedDelay);                            // Задержка с регулировкой скорости.( можно добавить -30)
        if (results.value == BUTT_A)goto label_x;     // Если  значение результата считывания = определению выход из цикла на метку х
      }

      if (results.value == BUTT_A)goto label_x;       // Если  значение результата считывания = определению выход из цикла на метку х
      FastLED.clear();                                // Очистить ленту.
      goto label_a;                                   // Перейти на метку "а"
    }

    //--------------------------------------------------7 "УСЫ ДЕДА МОРОЗА С ЗАМОРАЖИВАНИЕМ"-----------------------------------------------------
    if (results.value == BUTT_J) {                    // Если  значение результата считывания = определению .
label_r:                                              // Метка "r"
      for (int i = 0 ; i < 500 ; i++) {               // Цикл от 0 до 500 оборотов с шагом +1  , займет примерно ? минут

        for (int i = LED  / 2; i < LED; i++) {        // Цикл заполнения ленты с середины по стрелке.
          static uint8_t hue = 0;                     // Статическая пременная
          leds[i] = CHSV(hue = hue + 3, 255, 255);    // Перебор цвета светодиодов. (цвет, температура, яркость)
          retardSpeed = retardSpeed + i;              // Замедление с шагом = переменной i
          FastLED.show();                             // Демонстрируем на ленте.
          delay(speedDelay + retardSpeed);            // Задержка с регулировкой скорости + переменная)
          if (results.value == BUTT_A)goto label_x;   // Если  значение результата считывания = определению выход из цикла на метку х
        }
        retardSpeed = 0;                              // Переменная = 0
        for (int i = LED  / 2; i >= 0; i--) {         // Цикл заполнения ленты с середины против стрелки.
          static uint8_t ref = 0;                     // Статическая пременная
          leds[i] = CHSV(ref = ref + 5, 255, 255);    // Перебор цвета светодиодов. (цвет, температура, яркость)
          retardSpeed = retardSpeed + i;              // Замедление с шагом = переменной i
          FastLED.show();                             // Демонстрируем на ленте.
          delay(speedDelay + retardSpeed);            // Задержка с регулировкой скорости + переменная)
          if (results.value == BUTT_A)goto label_x;   // Если  значение результата считывания = определению выход из цикла на метку х
        }
        retardSpeed = 0;                              // Переменная = 0
        if (results.value == BUTT_A)goto label_x;     // Если  значение результата считывания = определению выход из цикла на метку х
      }
      if (results.value == BUTT_A)goto label_x;       // Если  значение результата считывания = определению выход из цикла на метку х
      FastLED.clear();                                // Очистить ленту.
      goto label_g;                                   // Перейти на метку "а"
    }
    //---------------------------------------------------  8 "БЕГУЩИЙ ЦВЕТНОЙ ОГОНЕК"----------------------------------------------------------
    if (results.value == BUTT_B) {                    // Если  значение результата считывания = определению
label_g: 
      for (int i = 0 ; i < 1000 ; i++) {              // Цикл от 0 до 1000 оборотов с шагом +1  , займет примерно ? минут
        if (results.value == BUTT_A)goto label_x;     // Если  значение результата считывания = определению выход из цикла на метку х
        static uint8_t hue = 0;                       // Статическая пременная
        for (int i = 0; i < LED; i = i + 1) {         // Цикл заполнения ленты по стрелке.
          if (results.value == BUTT_A)goto label_x;   // Если  значение результата считывания = определению выход из цикла на метку х
          leds[i] = CHSV(hue++, 255, 255);            // Перебор цвета светодиодов.
          FastLED.show();                             // Демонстрируем на ленте.
          delay(speedDelay);                          // Задержка с регулировкой скорости.
          if (results.value == BUTT_A)goto label_x;   // Если  значение результата считывания = определению выход из цикла на метку х
          leds[i] = CRGB::Black;                      // Цвет для ленты черный (выключено).
        }
        for (int i = (LED) - 1; i >= 0; i--) {        // Цикл заполнения ленты против стрелки.
          leds[i] = CHSV(hue++, 255, 255);            // Перебор цвета светодиодов.
          FastLED.show();                             // Демонстрируем на ленте. .
          delay(speedDelay);                          // Задержка с регулировкой скорости.
          if (results.value == BUTT_A)goto label_x;   // Выход из цикла.
          leds[i] = CRGB::Black;                      // Цвет для ленты черный (выключено).
        }
      }
      FastLED.clear(); 
      goto label_d;  
    }


    //--------------------------------------------------- 9 "КОПИЛКА"  ------------------------------------------------------------------------

    if (results.value == BUTT_F) {                    // Если  значение результата считывания = определению
label_d:                                              // Метка "c"
      for (int i = 0 ; i < 100 ; i++) {                // Цикл от 0 до 100 оборотов с шагом +1  , займет примерно ? минут
        static uint8_t hue = 0;                       // Статическая пременная
        for (int i = LED  / 2; i < LED; i++) {        // Цикл заполнения ленты с середины по стрелке.
          leds[i] = CHSV(hue++, 255, 255);            // Перебор цвета светодиодов.
          for (int i = LED  / 2; i >= 0; i--) {       // Цикл заполнения ленты с середины против стрелки.
            leds[i] = CHSV(hue++, 255, 255);          // Перебор цвета светодиодов.
            FastLED.show();                           // Демонстрируем на ленте.
            delay(speedDelay);                        // Задержка с регулировкой скорости.
            if (results.value == BUTT_A)goto label_x; // Выход из цикла.
          }
        }
        if (results.value == BUTT_A)goto label_x;     // Выход из цикла.
      }
      FastLED.clear();                                // Очистить ленту.
      goto label_e;                                   // Перейти на метку "d"
    }
    //-----------------------------------------------------0 "СЕВЕРНОЕ СИЯНИЕ"-----------------------------------------------------------------
    if (results.value == BUTT_X) {                    // Если  значение результата считывания = определению
label_e:                                              // Метка "d"
      for (int i = 0 ; i < 5000 ; i++) {              // Цикл от 0 до 5000 оборотов с шагом +1  , займет примерно ? минут
        for (int i = 0; i < LED; i++ ) {              // Цикл заполнения ленты.
        leds[i] = CHSV(colorChange + i * 8,255,255);  // умножение i уменьшает шаг радуги
        }
        colorChange = colorChange + 1;                // меняется от 0 до 255
        FastLED.show();                               // Демонстрируем на ленте.
        delay(speedDelay);                            // Задержка с регулировкой скорости.
        if (results.value == BUTT_A)goto label_x;     // Если  значение результата считывания = определению, выход из цикла на метку.
      }
      FastLED.clear();                                // Очистить ленту.
      goto label_a;                                   // Перейти на метку "a"
    }
    //-------------------------------------------------Дежурный режим, заходим сюда после выхода на метку х------------------------------------
    leds[0] = CRGB::Green;                            // 0 светодиод раскрасить зеленым (дежурный режим)
    FastLED.show();                                   // Демонстрируем на ленте.
    irrecv.resume();                                  // Повторяем ситывание пульта.
  }
}
   //--------------------------------------------------- При delay заглядываем сюда.----------------------------------------------------------
void yield() {                                        // Функция уступка.
  if (irrecv.decode(&results)) {                      // Считываем данные с пульта.
   // Serial.println(results.value , HEX );           // Выводим в монитор порта.
    irrecv.resume();                                  // Повторяем считывание пульта.                                   
  }
}



https://disk.yandex.ru/d/Un7LPKNtT-fgKg Скетч , библиотеки, схемы.

Комментарии