#define LED_PIN 15
#define BUTTON_PIN 12
#define SLIDE_PIN 34
#define ENCODER_CLK 5
#define ENCODER_DT 4
void LED_On(uint8_t brightness)
{
Serial.println(brightness);
pinMode(LED_PIN, OUTPUT);
analogWrite(LED_PIN, 255 - brightness);
}
void LED_Off()
{
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, HIGH);
}
bool button_up = true;
bool led_stat = false;
uint8_t brightness_set = 127;
uint8_t brightness_last = 0;
void readEncoder() {
int dtValue = digitalRead(ENCODER_DT);
if (dtValue == HIGH) {
if (!led_stat)
led_stat = true;
if (brightness_set >= 255 - 8)
brightness_set = 255;
if (brightness_set < 255 - 8)
brightness_set += 8;
}
if (dtValue == LOW) {
if (brightness_set > 8)
brightness_set -= 8;
if (brightness_set <= 8)
{
brightness_set = 0;
LED_Off();
led_stat = false;
}
}
LED_On(brightness_set);
}
void setup() {
Serial.begin(115200);
LED_Off();
pinMode(BUTTON_PIN, INPUT_PULLUP);
pinMode(SLIDE_PIN, INPUT);
pinMode(ENCODER_CLK, INPUT);
pinMode(ENCODER_DT, INPUT);
pinMode(LED_PIN, OUTPUT);
attachInterrupt(digitalPinToInterrupt(ENCODER_CLK), readEncoder, FALLING);
}
void loop() {
if (digitalRead(BUTTON_PIN) == LOW)
{
if (button_up)
{
button_up = false;
led_stat = !led_stat;
}
}
else
{
button_up = true;
}
if (led_stat)
{
if (brightness_last != brightness_set)
{
LED_On(brightness_set);
brightness_last = brightness_set;
}
}
else
LED_Off();
delay(10); // this speeds up the simulation
}