// Подключаем библиотеку FastLED.
#include "FastLED.h"
// Указываем, какое количество пикселей у нашей ленты.
#define LED_COUNT 20
// Указываем, к какому порту подключен вход ленты DIN.
#define LED_PIN 12
#define TIME_FADE 30
#define SET_CANDLE 1
#define TIME_FLASH 2000
#define SWAP(G, R, B) R,G,B
#define ON 1
#define OFF 0
// Создаем переменную strip для управления нашей лентой.
CRGB strip[LED_COUNT];
int mass_pin[5] = {A0,A1,A2,A3,A4};
uint8_t flag_flash = OFF;
unsigned long start_flash = 0;
void flash_center_candle()
{
flag_flash = ON;
digitalWrite(9, LOW);
delay(5);
digitalWrite(9, HIGH);
start_flash = millis();
}
void flash_center_candel_timer()
{
if((millis() - start_flash > TIME_FLASH) and (flag_flash == ON))
{
flag_flash = OFF;
}
}
void fade()
{
static unsigned long delay_time = 0;
static int cnt_period = 0;
if(millis() - delay_time > TIME_FADE)
{
if(cnt_period > 20)
{
cnt_period = 5;
}
uint8_t power = 100+random(155);
for (int i = 0; i < LED_COUNT; i++)
{
if(flag_flash == OFF)
{
if((i == LED_COUNT/2-1) or (i == LED_COUNT/2) or (i == LED_COUNT/2-2) or (i == LED_COUNT/2+1))
{
strip[i] = CRGB(SWAP(power,0, 0)); // Красный цвет.
}
else
{
strip[i] = CRGB(SWAP(30, 10, 0)); // Красный цвет.
}
}
else{
if((i == LED_COUNT/2-1) or (i == LED_COUNT/2) or (i == LED_COUNT/2-2) or (i == LED_COUNT/2-3) or (i == LED_COUNT/2+1) or (i == LED_COUNT/2+2))
{
strip[i] = CRGB(SWAP(power,0, 0)); // Красный цвет.
}
else
{
strip[i] = CRGB(SWAP(90, 30, 0)); // Красный цвет.
}
}
}
// Передаем цвета ленте.
FastLED.show();
delay_time = millis();
cnt_period++;
}
}
void reset_timer_candle()
{
static unsigned long timer = 0;
if(millis() - timer > 3000)
{
Serial.println("timer _on");
digitalWrite(9, LOW);
delay(15);
digitalWrite(9, HIGH);
timer = millis();
}
}
void setup()
{
// Добавляем ленту
FastLED.addLeds<WS2812B, LED_PIN, RGB>(strip, LED_COUNT);
Serial.begin(115200);
pinMode(9, OUTPUT);
digitalWrite(9, HIGH);
}
int prev_cnt = 0;
int cnt_candle_set = 0;
void loop()
{
int cnt = 0;
for(int i = 0; i < 5; i++)
{
if(digitalRead(mass_pin[i]) == SET_CANDLE)
{
cnt++;
}
}
if (prev_cnt < cnt)
{
cnt_candle_set++;
if(cnt_candle_set > 20)
{
cnt_candle_set = 0;
prev_cnt = cnt;
flash_center_candle();
}
}
else{
cnt_candle_set = 0;
prev_cnt = cnt;
}
reset_timer_candle();
fade();
flash_center_candel_timer();
}