#include <EEPROM.h>
#define encoderOutA 3 // CLK
#define encoderOutB 4 // DT
#define LED1_PIN 0 // LED1, must connect to pwm pin
#define LED2_PIN 1 // LED2, must connect to pwm pin
#define SW_PIN 2 // Button pin
#define MAX_BRIGHTNESS 255
#define MIN_BRIGHTNESS 10
int brightness1 = 0; // Яскравість світлодіода 1
int brightness2 = 0; // Яскравість світлодіода 2
int brightness3 = 0; // Яскравість світлодіода 1 та 2
int step = 25; // Величина кроку зміни яскравості
int currentState;
int oldState;
volatile uint8_t selectedLED = 1;
void setup() {
pinMode(encoderOutA, INPUT_PULLUP);
pinMode(encoderOutB, INPUT_PULLUP);
pinMode(LED1_PIN, OUTPUT);
pinMode(LED2_PIN, OUTPUT);
pinMode(SW_PIN, INPUT_PULLUP);
brightness1 = EEPROM.read(0); // Оновлюємо останнє значення яскравості для світлодіода 1
brightness2 = EEPROM.read(1); // Оновлюємо останнє значення яскравості для світлодіода 2
brightness3 = EEPROM.read(2); // Оновлюємо останнє значення яскравості для світлодіода 2
}
void loop() {
// Обробка енкодера
int currentState = digitalRead(encoderOutA);
if (currentState != oldState) {
if (digitalRead(encoderOutB) != currentState) {
if (selectedLED == 1) {
brightness1 += step;
brightness1 = constrain(brightness1, MIN_BRIGHTNESS, MAX_BRIGHTNESS);
analogWrite(LED1_PIN, brightness1);
} else if (selectedLED == 2) {
brightness2 += step;
brightness2 = constrain(brightness2, MIN_BRIGHTNESS, MAX_BRIGHTNESS);
analogWrite(LED2_PIN, brightness2);
} else if (selectedLED == 0) {
brightness3 += step;
brightness3 = constrain(brightness3, MIN_BRIGHTNESS, MAX_BRIGHTNESS);
analogWrite(LED1_PIN, brightness3);
analogWrite(LED2_PIN, brightness3);
}
} else {
if (selectedLED == 1) {
brightness1 -= step;
brightness1 = constrain(brightness1, MIN_BRIGHTNESS, MAX_BRIGHTNESS);
analogWrite(LED1_PIN, brightness1);
} else if (selectedLED == 2) {
brightness2 -= step;
brightness2 = constrain(brightness2, MIN_BRIGHTNESS, MAX_BRIGHTNESS);
analogWrite(LED2_PIN, brightness2);
} else if (selectedLED == 0) {
brightness3 -= step;
brightness3 = constrain(brightness3, MIN_BRIGHTNESS, MAX_BRIGHTNESS);
analogWrite(LED1_PIN, brightness3);
analogWrite(LED2_PIN, brightness3);
}
}
oldState = currentState;
// Записуємо нові значення яскравості в EEPROM
EEPROM.write(0, brightness1);
EEPROM.write(1, brightness2);
EEPROM.write(2, brightness3);
}
// Обробка перемикача світлодіодів
if (digitalRead(SW_PIN) == LOW) {
delay(20);
if (digitalRead(SW_PIN) == LOW) {
selectedLED = (selectedLED + 1) % 3;
analogWrite(LED1_PIN, LOW);
analogWrite(LED2_PIN, LOW);
if (selectedLED == 1) {
analogWrite(LED1_PIN, brightness1);
} else if (selectedLED == 2) {
analogWrite(LED2_PIN, brightness2);
} else if (selectedLED == 0) {
analogWrite(LED1_PIN, brightness3);
analogWrite(LED2_PIN, brightness3);
}
delay(500);
}
}
}