#include <LiquidCrystal_I2C.h>
int clk = 2;
int dt = 3;
int sw = 4;
int led1 = 8;
int led2 = 9;
int led3 = 10;
int led4 = 11;
int counter = 0;
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
lcd.init();
lcd.backlight();
pinMode(clk, INPUT);
pinMode(dt, INPUT);
pinMode(sw, INPUT);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
attachInterrupt(digitalPinToInterrupt(clk), readEncoder, FALLING);
}
void readEncoder(){
int value = digitalRead(dt);
if(value == HIGH){
counter++;
} else if(value == LOW){
counter--;
}
}
int getCounter(){
int value;
noInterrupts();
value = counter;
interrupts();
return value;
}
void resetCounter(){
noInterrupts();
counter = 0;
interrupts();
}
void led_nyala_putarkanan(){
if(counter == 1){
digitalWrite(led1, HIGH);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
}else if(counter == 2){
digitalWrite(led1, LOW);
digitalWrite(led2, HIGH);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
}else if(counter == 3){
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, HIGH);
digitalWrite(led4, LOW);
}else if(counter == 4){
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, HIGH);
}else if(counter > 4){
counter = 0;
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
}
}
void led_nyala_putarkiri(){
if(counter == -4){
digitalWrite(led1, HIGH);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
}else if(counter == -3){
digitalWrite(led1, LOW);
digitalWrite(led2, HIGH);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
}else if(counter == -2){
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, HIGH);
digitalWrite(led4, LOW);
}else if(counter == -1){
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, HIGH);
}else if(counter < -4){
counter = 0;
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
}
}
void loop() {
lcd.setCursor(0,0);
lcd.print("Counter: ");
lcd.setCursor(0,1);
lcd.print(getCounter());
led_nyala_putarkanan();
led_nyala_putarkiri();
}