Собираем контроллер адресной светодиодной ленты на Ардуино с ик приемником.
Схема подключения Ардуино к ленте и модулю ик приемника, блок питания на 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 Скетч , библиотеки, схемы.
Комментарии
Отправить комментарий