#define ENCODER_CLK 2
#define ENCODER_DT 3
#define ENCODER_SW 4//encoder button
#define led1 5
#define led2 6
int value1 = 60; //initial value for led 1
int value2 = 60; //initial value for led 2
int change = 5; // change in value per encoder tick
int upper_limit = 255; //upper limit for value
int lower_limit = 0; //lower limit for value
bool toggle_state = HIGH; //led selection
int buttonState; //current encoder button state
int lastButtonState = HIGH; // last encoder button state
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50;// debounce time thereshold in milisecond
void setup() {
Serial.begin(115200);
pinMode(ENCODER_CLK, INPUT_PULLUP);
pinMode(ENCODER_DT, INPUT_PULLUP);
pinMode(ENCODER_SW, INPUT_PULLUP);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
attachInterrupt(digitalPinToInterrupt(ENCODER_CLK), readEncoder, FALLING);
}
void readEncoder() {
if (toggle_state){
int dtValue = digitalRead(ENCODER_DT);
if (dtValue == HIGH) {
if (value1<upper_limit){
value1=value1+change;
}
Serial.print(value1);
Serial.println(" Rotated clockwise ⏩");
}
if (dtValue == LOW) {
if (value1>lower_limit){
value1=value1-change;
}
Serial.print(value1);
Serial.println(" Rotated counterclockwise ⏪");
}
}
else {
int dtValue = digitalRead(ENCODER_DT);
if (dtValue == HIGH) {
if (value2<upper_limit){
value2=value2+change;
}
Serial.print(value2);
Serial.println(" Rotated clockwise ⏩");
}
if (dtValue == LOW) {
if (value2>lower_limit){
value2=value2-change;
}
Serial.print(value2);
Serial.println(" Rotated counterclockwise ⏪");
}
}
}
void loop() {
int reading = digitalRead(ENCODER_SW);
if (reading != lastButtonState) {
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
if (reading != buttonState) {
buttonState = reading;
if (buttonState == LOW) {
toggle_state = !toggle_state;
}
}
}
lastButtonState = reading;
if (toggle_state == HIGH) {
analogWrite(led1, value1);
}
else {
analogWrite(led2, value2);
}
}