//ГИРЛЯНДА В ЗАЛЕ
#include "FastLED.h" //подключили библиотеку для работы с адресными светодиодами
//задаём яркость гирлянды
const byte IARK = 225; //переменной присваиваем яркость ленты (может быть от 0 до 255).
//const byte IARK = 100; //яркость для отладки, чтобы не слепила
//Задаёт, как бы, верхнюю планку яркости. Во всех эффектах яркость будет не более этой планки.
//задаём размер гирлянды
const byte LED_PIN = A0; // переменной LED_PIN задали пин A0, т.е. через этот пин будем управлять лентой.
const byte ColY = 12; //количество пикселей (светодиодов) по вертикали (т.е. кол-во столбиков)
const byte ColX = 18; //количество пикселей по горизонтали (т.е. кол-во столбиков)
const byte LED_COUNT = 216; //переменная для хранения количества светодиодов (12*18 = 216)
//объявили массив lenta, где будут храниться цвета каждого светодиода
CRGB lenta[LED_COUNT];
//Объявляем массив. Он объявляется как глобальный и будет хранить цвет каждого светодиода для всех процедур.
//(Это будет моя промежуточная матрица. С ней производим все расчёты. А в конце переносим инфу из неё в ленту на окне
unsigned long myMas [ColY][ColX]; //unsigned long - это большое положительное число (в unsigned long как раз влезает цвет в 16-ичной системе)
// Для справки. Если смотреть на матрицу с дороги, то:
// Первый элемент с адресом 0, 0 (строка 0 столбец 0) находится в левом верхнем углу (если смотреть с дороги)
// Последний элемент – в правом нижнем углу.
// Элемент с адресом 0, 2 строка 0 столбец 2) - здесь это myMas [0][2] = 5
//(а первый элемент светодиодной матрицы в правом нижнем углу (потому что туда подведён управляющий провод и иначе не сделать))
//{0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0}, (этот пример только для справки)
//{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, (т.к. моя матрица будет содержать)
//{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, (цвет в 16-ичной системе - 0x000000)
//{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, (а не нули, как здесь)
//{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
//ГИРЛЯНДА В ЗАЛЕ
//СТАРТОВАЯ ПРОЦЕДУРА (выполнится один раз при включении Ардуины)
void setup() {
delay(680); //пауза полсек. (На всякий случай, что бы блок питания стабилизировался)
FastLED.setBrightness(IARK); //задаём яркость ленты (может быть от 0 до 255). Задаёт, как бы, верхнюю планку яркости. Во всех эффектах яркость будет не более этой планки.
randomSeed(analogRead(0)); //инициализируем генератор случайных чисел, передав на него напряжение с пина А0 (подойдёт любой незанятый аналоговый пин)
// основные настройки для адресной ленты
FastLED.addLeds<NEOPIXEL, LED_PIN>(lenta, LED_COUNT); // основные настройки для адресной ленты
// Аргументы: Чип, Пин,
// Переменная, связанная с лентой
// Количество светодиодов в ленте
//запустим функцию, которая на всякий случай очистит массив myMas (промежуточную матрицу)
//т.е. поставит во все элементы черный цвет 0x000000
ClearMas();
//Serial.begin(9600); //инициализировали функцию для вывода инфы в монитор компа (она нужна только для отладки. Потом можно удалить)
//А для вывода инфы в монитор команда: Serial.print(); или Serial.println(); (вторая с переходом к новой строке)
}
//БЕСКОНЕЧНО ПОВТОРЯЮЩАЯСЯ ПРОЦЕДУРА (для справки: 13 секунд человек идёт быстрым шагом возле моего окна)
void loop() {
//ГИРЛЯНДА В ЗАЛЕ
//Запустим анимацию "Падающий снег"
EffectSnow(13); //В скобках количество секунд выполнения процедуры (к нему ещё прибавится пара секунд, что бы остатки снежинок упали на землю)
//по завершении процедуры останется чёрный экран
//Запустим анимацию с подмигивающей улыбкой
EffectSmile(0xFFFFFF); //цвет улыбки будет белый
//по завершении процедуры улыбка останется на экране
//Запустим иллюминацию "Эффект Матрицы"
EffectMatrix(13); //в скобках количество секунд выполнения процедуры (к нему ещё прибавится пара секунд, что бы остатки матрицы упали на землю)
//по завершении процедуры останется чёрный экран
//Запустим анимацию с подмигивающей улыбкой
EffectSmile(0x00FF00); //цвет улыбки будет зелёным
//по завершении процедуры улыбка останется на экране
//Запустим иллюминацию "Эффект синусоиды"
EffectSinusoida(12); //в скобках количество секунд выполнения процедуры
//по завершении процедуры останется чёрный экран
delay(380); //задержка, чтобы синхронизироваться с гирляндой в детской
//EffectMatrix(1); - раскомментить для отладки синхронизации с другой гирляндой
//Запустим анимацию "Эффект Огоньки" (6 огоньков кружатся по всему экрану)
EffectLights(11430); //В скобках количество МиллиСекунд выполнения процедуры (1 сек = 1000 миллисек)
//EffectMatrix(1);
//Запустим анимацию "Радуга" (весь экран заполнен разноцветными полосами, которые поворачиваются то в одну, то в другую сторону)
EffectRaduga (14170); //В скобках количество МиллиСекунд выполнения процедуры (1 сек = 1000 миллисек)
//(появляется плавным наростанием яркости из черноты и исчезает плавно угасая в черноту)
//EffectMatrix(1);
//Запустим анимацию "Вращающееся кольцо"
//EffectCircle(13340);
EffectCircle(11600); //В скобках количество миллисекунд выполнения процедуры (к нему ещё прибавится пара секунд, что бы остатки снежинок упали на землю)
//по завершении процедуры останется чёрный экран
//EffectMatrix(1);
//Запустим иллюминацию "Выгорающие пятна"
EffectPiatna(13000);
//EffectPiatna(12700); //В скобках количество миллисекунд выполнения процедуры
//EffectMatrix(1);
//Запустим показ картинок
//(ПОКАЖЕТ ТОЛЬКО ОДНУ КАРТИНКУ - ЗАЯЦ)
//EffectPictures(); //по завершении процедуры останется последняя картинка
//Запустим иллюминацию "Бегущий текст" (надпись пробежит один раз справа налево)
//(надпись "2024")
EffectLetters(); //за один заход процедуры вся строка текста пробегает полностью от начала до конца
// "2024" проезжает секунд за 8 секунд.
//по завершении процедуры останется чёрный экран
//EffectMatrix(1);
//Запустим анимацию "Three".
//В ней поочереди пройдут три анимации:
//Enoise (выглядит как выгорающие пятна), meta (выглядит как ромбики, движущиеся по диагонали), Wave (выглядит как эквалайзер в магнитоле).
//Причём, Enoise пройдёт 1 раз с одними цветами и ещё раз с другими цветамии, meta пройдет 1 раз с одними цветами и ещё раз с другими цветами
//Wave пройдёт 1 раз
EffectsThree(14844); //в скобках количество секунд выполнения каждого из 3-х эффектов.
//если постажвить 14845, то станет чуть задолго, а 14844 чуть закоротко
//EffectMatrix(1);
//Запустим анимацию "Синусоидальные кольца" (передав кол-во миллисекунд)
EffectSinCircles(8000, 5800, 7700, 4100, 6700); //включает в себя сразу три эффекта, идущих по очереди
//1) кольца, сужающиеся в центр экрана (КРАСНЫЕ);
//1) кольца, сужающиеся в центр экрана (СИНИЕ;
//2) кольца, плавающие по экрану (КРАСНЫЕ);
//2) кольца, плавающие по экрану (СИНИЕ);
//3) три плавающих пятнышка
//EffectMatrix(1);
//Запустим анимацию "Плавающее изменяющее пятно (СОПЛЯ)"
EffectDifficult(19000); //В скобках количество миллисекунд выполнения процедуры
//EffectMatrix(1);
//Запустим анимацию "Эффект Икс" (два огонька летают по диагонали из угла в угол)
Effect_X(14950); //В скобках количество миллисекунд выполнения процедуры
//EffectMatrix(1);
//Запустим иллюминацию "Эффект огня"
EffectFire(24550); //в скобках время выполнения процедуры (в секундах)
//EffectMatrix(1);
//ГИРЛЯНДА В ЗАЛЕ ПРИЛИЧНО ЗАПАЗДЫВАЛА ЧЕРЕЗ ПАРУ ЧАСОВ. ПОПРОБОВАТЬ ПОСТАВИТЬ ПАУЗУ 24500
////////
//delay (1); //пауза, чтобы синхронизироваться с окном детской
}
//ГИРЛЯНДА В ЗАЛЕ
//НЕИСПОЛЬЗУЕМЫЕ ЭФФЕКТЫ И ФУНКЦИИ:
//Сделаем чёрный экран для паузы перед переходом к следующему виду иллюминации
// ClearMas(); //функция очищает массив myMas (промежуточную матрицу) от старой иллюминации
// ToWindow(400); //Отключаем все светодиоды (т.е. каждый светодиод станет чёрный)
//(в скобках пауза до вывода новой иллюминации (миллиСек))