#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
#define ENCODER_CLK 2
#define ENCODER_DT 3
#define ENCODER_SW 4
int counter = 0;
void setup() {
//inisialisasi LCD
lcd.init();
lcd.backlight();
//inisialisasi LED
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
digitalWrite(13, LOW);
//inisialisasi encoder
pinMode(ENCODER_DT, INPUT);
pinMode(ENCODER_SW, INPUT_PULLUP);
pinMode(ENCODER_CLK, INPUT);
attachInterrupt(digitalPinToInterrupt(ENCODER_CLK), readEncoder, FALLING);
}
void readEncoder(){
int dtValue = digitalRead(ENCODER_DT);
if (dtValue == HIGH) {
counter++; //clockwise
}
if (dtValue == LOW) {
counter--; //counterclockwise
}
}
int getCounter() {
int result;
noInterrupts();
result = counter;
interrupts();
return result;
}
void resetCounter(){
noInterrupts();
counter = 0;
interrupts();
}
void loop(){
lcd.setCursor(3,0);
lcd.print("Counter:");
lcd.setCursor(7,1);
lcd.print(getCounter());
lcd.print(" ");
if(digitalRead (ENCODER_SW)==LOW){
resetCounter();
}
//counter++
if(counter == 1){
digitalWrite(13, HIGH);
}
else if (counter == 2){
digitalWrite(12, HIGH);
digitalWrite(13, LOW);
}
else if (counter ==3){
digitalWrite(11, HIGH);
digitalWrite(12, LOW);
}
else if (counter == 4){
counter = 0;
}
else{
digitalWrite(13, LOW);
digitalWrite(12, LOW);
digitalWrite(11, LOW);
}
//counter--
if(counter == -1){
digitalWrite(11, HIGH);
}
else if (counter == -2){
digitalWrite(12, HIGH);
digitalWrite(11, LOW);
}
else if (counter == -3){
digitalWrite(13, HIGH);
digitalWrite(12, LOW);
}
else if (counter == -4){
counter = 0;
}
else{
digitalWrite(11, LOW);
digitalWrite(12, LOW);
digitalWrite(13, LOW);
}
}