#include "FastLED.h"
#define LED_NUM (10)
#define BRIGHTNESS (70) // max code
#define LED_PIN (13)
#define BUTTON_PIN (8)
#define SWITCH_PIN (11)
#define UPDATE_COLOR (3000) // [ms]
#define UPDATE_BRIGHTNESS (50) // [ms]
#define UPDATE_RUNNER (300) // [ms]
CRGB leds[LED_NUM];
boolean stateButton = false;
boolean stateLeds = true;
boolean stateBrightness = false;
boolean stateRunner = false;
long lastTimeColor = 0;
long lastTimeBrightness = 0;
long lastTimeRunner = 0;
uint8_t level = 0;
uint8_t count = 0;
void setup()
{
pinMode(BUTTON_PIN, INPUT);
pinMode(SWITCH_PIN, INPUT);
FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, LED_NUM);
FastLED.setBrightness(BRIGHTNESS);
for (int i = 0; i < LED_NUM; i++)
leds[i].setHue(i * 255 / LED_NUM);
FastLED.show();
delay(1000);
}
void loop()
{
boolean button = digitalRead(BUTTON_PIN);
if (button == LOW)
{
if (stateButton == HIGH)
stateLeds = !stateLeds;
if (stateLeds)
FastLED.setBrightness(BRIGHTNESS);
}
stateButton = button;
if (stateLeds)
{
if (digitalRead(SWITCH_PIN))
{
if (millis() - lastTimeColor > UPDATE_COLOR)
{
for (int i = 0; i < LED_NUM; i++)
leds[i].setHue(random8());
lastTimeColor = millis();
}
if (millis() - lastTimeBrightness > UPDATE_BRIGHTNESS)
{
if (stateBrightness)
{
if (level < BRIGHTNESS - 1)
level++;
else
stateBrightness = false;
}
else
{
if (level > 0)
level--;
else
stateBrightness = true;
}
FastLED.setBrightness(level);
lastTimeBrightness = millis();
}
}
else
if (millis() - lastTimeRunner > UPDATE_RUNNER)
{
FastLED.clear();
leds[count] = CRGB::Red;
if (stateRunner)
{
if (count < LED_NUM - 1)
count++;
else
stateRunner = false;
}
else
{
if (count > 0)
count--;
else
stateRunner = true;
}
lastTimeRunner = millis();
}
}
else
FastLED.setBrightness(0);
FastLED.show();
}
Переключатель режима:
> радуга
< бегунок
Вкл./Выкл.