#define r_pin PB0 // Пин для красного светодиода
#define g_pin PB2 // Пин для зеленого светодиода
#define b_pin PB1 // Пин для синего светодиода
#define button PB5 // Пин кнопки
#define delayTime 500 // Задержка между изменениями цвета
#define INIT_ADDR 1023
#define INIT_KEY 50
#include <EncButton.h> // https://github.com/GyverLibs/EncButton
#include <TimerMs.h> // https://github.com/GyverLibs/TimerMs
#include <EEPROM.h> // Стандартаня библиотека
//#include <EasyHID.h> // https://github.com/GyverLibs/EasyHID
Button key(button, INPUT, HIGH);
#define EB_CLICK_TIME 100 // Таймаут ожидания кликов
#define EB_HOLD_TIME 200 // Таймаут удержания
TimerMs delay_tmr(delayTime, 1, 0);
bool mode;
int8_t color = 0;
void setup() {
if (EEPROM.read(INIT_ADDR) != INIT_KEY) { // Первый запуск
EEPROM.write(INIT_ADDR, INIT_KEY);
mode = true;
EEPROM.put(1, mode);
}
pinMode(r_pin, OUTPUT);
pinMode(g_pin, OUTPUT);
pinMode(b_pin, OUTPUT);
delay_tmr.setPeriodMode();
EEPROM.get(1, mode);
starting();
//HID.begin();
}
void loop() {
//HID.tick();
key.tick();
if (key.press()) {
digitalWrite(r_pin, LOW);
digitalWrite(g_pin, LOW);
digitalWrite(b_pin, LOW);
}
if (key.click()) {
//Keyboard.click(KEY_RIGHT_ALT);
digitalWrite(g_pin, HIGH);
}
if (key.holding()) {
//Keyboard.press(KEY_RIGHT_ALT);
digitalWrite(b_pin, HIGH);
}
if (mode == true && !key.holding()) rainbowEffect();
else {
digitalWrite(r_pin, LOW);
digitalWrite(g_pin, LOW);
digitalWrite(b_pin, LOW);
}
}
void starting() {
digitalWrite(r_pin, HIGH);
digitalWrite(g_pin, HIGH);
digitalWrite(b_pin, HIGH);
delay(3000);
if (digitalRead(button) == HIGH) {
if (mode == true) {
mode = false;
EEPROM.put(1, mode);
digitalWrite(r_pin, LOW);
digitalWrite(g_pin, LOW);
digitalWrite(b_pin, HIGH);
delay(3000);
} else {
mode = true;
EEPROM.put(1, mode);
digitalWrite(r_pin, LOW);
digitalWrite(g_pin, HIGH);
digitalWrite(b_pin, LOW);
delay(3000);
}
}
digitalWrite(r_pin, LOW);
digitalWrite(g_pin, LOW);
digitalWrite(b_pin, LOW);
}
void rainbowEffect() {
if (delay_tmr.tick()) {
if (color > 5) color = 0;
else color += 1;
if (color == 1) {
digitalWrite(r_pin, HIGH);
digitalWrite(g_pin, LOW);
digitalWrite(b_pin, LOW);
} else if (color == 2) {
digitalWrite(r_pin, HIGH);
digitalWrite(g_pin, HIGH);
digitalWrite(b_pin, LOW);
} else if (color == 3) {
digitalWrite(r_pin, LOW);
digitalWrite(g_pin, HIGH);
digitalWrite(b_pin, LOW);
} else if (color == 4) {
digitalWrite(r_pin, LOW);
digitalWrite(g_pin, HIGH);
digitalWrite(b_pin, HIGH);
} else if (color == 5) {
digitalWrite(r_pin, LOW);
digitalWrite(g_pin, LOW);
digitalWrite(b_pin, HIGH);
} else if (color == 6) {
digitalWrite(r_pin, HIGH);
digitalWrite(g_pin, LOW);
digitalWrite(b_pin, HIGH);
} else if (color == 7) { // Не используеться
digitalWrite(r_pin, LOW);
digitalWrite(g_pin, LOW);
digitalWrite(b_pin, LOW);
}
}
}