Загрузка данных
#include <FastLED.h>
// =====================================================
// АДРЕСНЫЕ RGB СВЕТОДИОДЫ
// =====================================================
#define LED_DATA_PIN 25
#define NUM_LEDS 10
#define LED_TYPE WS2812B
#define COLOR_ORDER GRB
CRGB leds[NUM_LEDS];
// =====================================================
// КНОПКА BOOT ESP32
// =====================================================
#define BOOT_PIN 0
// =====================================================
// РЕЖИМЫ
// =====================================================
enum RGBMode {
MODE_OFF,
MODE_WHITE,
MODE_RAINBOW,
MODE_GRADIENT
};
RGBMode currentMode = MODE_OFF;
// =====================================================
// КНОПКА
// =====================================================
bool lastButtonState = HIGH;
unsigned long lastButtonTime = 0;
const unsigned long DEBOUNCE_TIME = 300;
// =====================================================
// НАСТРОЙКИ ЯРКОСТИ
// =====================================================
#define BRIGHTNESS 80
// =====================================================
// SETUP
// =====================================================
void setup() {
Serial.begin(115200);
// BOOT-кнопка
pinMode(BOOT_PIN, INPUT_PULLUP);
// ===================================================
// RGB LED
// ===================================================
FastLED.addLeds<
LED_TYPE,
LED_DATA_PIN,
COLOR_ORDER
>(
leds,
NUM_LEDS
);
FastLED.setBrightness(BRIGHTNESS);
FastLED.clear();
FastLED.show();
Serial.println();
Serial.println("================================");
Serial.println(" RGB LED TEST");
Serial.println("================================");
Serial.println();
Serial.println("BOOT = смена режима");
Serial.println();
Serial.println("0 = OFF");
Serial.println("1 = WHITE");
Serial.println("2 = RAINBOW");
Serial.println("3 = GRADIENT");
Serial.println();
}
// =====================================================
// OFF
// =====================================================
void showOff() {
FastLED.clear();
}
// =====================================================
// WHITE
// =====================================================
void showWhite() {
for (int i = 0; i < NUM_LEDS; i++) {
leds[i] = CRGB::White;
}
}
// =====================================================
// RAINBOW
// =====================================================
void showRainbow() {
static uint8_t hue = 0;
for (int i = 0; i < NUM_LEDS; i++) {
leds[i] = CHSV(
hue + (i * 12),
255,
255
);
}
hue++;
}
// =====================================================
// GRADIENT
// =====================================================
void showGradient() {
static uint8_t offset = 0;
for (int i = 0; i < NUM_LEDS; i++) {
leds[i] = CHSV(
offset + (i * 20),
255,
255
);
}
offset++;
}
// =====================================================
// СМЕНА РЕЖИМА
// =====================================================
void nextMode() {
currentMode =
(RGBMode)(
((int)currentMode + 1) % 4
);
Serial.print("MODE = ");
switch (currentMode) {
case MODE_OFF:
Serial.println("OFF");
break;
case MODE_WHITE:
Serial.println("WHITE");
break;
case MODE_RAINBOW:
Serial.println("RAINBOW");
break;
case MODE_GRADIENT:
Serial.println("GRADIENT");
break;
}
}
// =====================================================
// LOOP
// =====================================================
void loop() {
// ===================================================
// ЧИТАЕМ BOOT
// ===================================================
bool buttonState = digitalRead(BOOT_PIN);
// Новое нажатие
if (
lastButtonState == HIGH &&
buttonState == LOW
) {
unsigned long now = millis();
if (
now - lastButtonTime >
DEBOUNCE_TIME
) {
nextMode();
lastButtonTime = now;
}
}
lastButtonState = buttonState;
// ===================================================
// ОТРИСОВКА РЕЖИМА
// ===================================================
switch (currentMode) {
case MODE_OFF:
showOff();
break;
case MODE_WHITE:
showWhite();
break;
case MODE_RAINBOW:
showRainbow();
break;
case MODE_GRADIENT:
showGradient();
break;
}
FastLED.show();
// Скорость анимации
delay(20);
}