// Arduino and KY-040 module
/********
Versi 26 Juli 2023 WORK
********/
#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_GFX.h>
Adafruit_SSD1306 lcd(128,64,&Wire,4);
#define CLK 8
#define DT 9
#define SW 10
int counter = 0;
int statCLK;
int statAkhirCLK;
int statBtn;
unsigned long statAkhirBtn = 0;
bool CW=0;
bool CCW=0;
bool OK=0;
int page=0;
int menu=1;
void setup(){
pinMode(CLK, INPUT);
pinMode(DT, INPUT);
pinMode(SW, INPUT_PULLUP);
Serial.begin(115200);
lcd.begin(SSD1306_SWITCHCAPVCC, 0x3C);
lcd.clearDisplay();
statAkhirCLK = digitalRead(CLK);
updateMenu();
}
void loop(){
readEnc();
if(page==0){
if(CW){
CW=0;
menu++;
updateMenu();
}
if(CCW){
CCW=0;
menu--;
updateMenu();
}
if(OK){
OK=0;
if(menu==1){
page=1;
updateMenu();
executeAction(1);
}
if(menu==2){
page=2;
updateMenu();
}
if(menu==3){
page=3;
updateMenu();
}
if(menu==4){
page=4;
updateMenu();
}
}
}
if(page==1){
}
}
void executeAction(int act){
if(act==1){
while(page==1){
Serial.println("ukur gravitasi");
encSW();
if(OK){
OK=0;
page=0;
updateMenu();
}
}
}
}
void readEnc(){
statCLK = digitalRead(CLK);
if(statCLK != statAkhirCLK && statCLK ==1){
if(digitalRead(DT) != statCLK){
CW=1;
}
else{
CCW=1;
}
}
statAkhirCLK = statCLK;
statBtn = digitalRead(SW);
if(statBtn == LOW){
if(millis()-statAkhirBtn > 50){
OK=1;
}
statAkhirBtn = millis();
}
delay(1);
}
void encSW(){
statBtn = digitalRead(SW);
if(statBtn != statAkhirBtn){
if(statBtn == 0){
OK=1;
}
delay(50);
}
statAkhirBtn = statBtn;
}
void updateMenu(){
if(page==0){
lcd.clearDisplay();
lcd.setTextSize(1);
lcd.setTextColor(WHITE);
lcd.setCursor(0,0);
lcd.print("MENU ROOT");
switch(menu){
case 0:
menu=4;
lcd.setCursor(0,10);lcd.print(" MULAI");
lcd.setCursor(0,18);lcd.print(" Set Panjang Tali");
lcd.setCursor(0,25);lcd.print(" Cek Sensor");
lcd.setCursor(0,32);lcd.print(">Bantuan");
break;
case 1:
lcd.setCursor(0,10);lcd.print(">MULAI");
lcd.setCursor(0,18);lcd.print(" Set Panjang Tali");
lcd.setCursor(0,25);lcd.print(" Cek Sensor");
lcd.setCursor(0,32);lcd.print(" Bantuan");
break;
case 2:
lcd.setCursor(0,10);lcd.print(" MULAI");
lcd.setCursor(0,18);lcd.print(">Set Panjang Tali");
lcd.setCursor(0,25);lcd.print(" Cek Sensor");
lcd.setCursor(0,32);lcd.print(" Bantuan");
break;
case 3:
lcd.setCursor(0,10);lcd.print(" MULAI");
lcd.setCursor(0,18);lcd.print(" Set Panjang Tali");
lcd.setCursor(0,25);lcd.print(">Cek Sensor");
lcd.setCursor(0,32);lcd.print(" Bantuan");
break;
case 4:
lcd.setCursor(0,10);lcd.print(" MULAI");
lcd.setCursor(0,18);lcd.print(" Set Panjang Tali");
lcd.setCursor(0,25);lcd.print(" Cek Sensor");
lcd.setCursor(0,32);lcd.print(">Bantuan");
break;
case 5:
menu=1;
lcd.setCursor(0,10);lcd.print(">MULAI");
lcd.setCursor(0,18);lcd.print(" Set Panjang Tali");
lcd.setCursor(0,25);lcd.print(" Cek Sensor");
lcd.setCursor(0,32);lcd.print(" Bantuan");
break;
}
}
if(page==1){
lcd.clearDisplay();
lcd.setTextSize(1);
lcd.setTextColor(WHITE);
lcd.setCursor(0,0);
lcd.print("MENU PAGE 1");
}
if(page==2){
lcd.clearDisplay();
lcd.setTextSize(1);
lcd.setTextColor(WHITE);
lcd.setCursor(0,0);
lcd.print("MENU PAGE 2");
}
lcd.display();
}
/*************
Versi 20/07/2023
*************/
// int encA = 8; // CLK pin
// int encB = 9; // DT pin
// int encBtn = 10; // SW pin
// bool statA = 0;
// bool statAkhirA =0;
// bool statB = 0;
// bool statAkhirB =0;
// int counter=1;
// int CW=0;
// int CCW=0;
// void setup(){
// pinMode(encA, INPUT);
// pinMode(encB, INPUT);
// Serial.begin(115200);
// statAkhirA = digitalRead(encA);
// }
// void loop(){
// statA=digitalRead(encA);
// statB=digitalRead(encB);
// if(statA != statAkhirA && statA == 1){
// if(statB != statA){
// CW=1;;
// }
// else{
// CCW=1;
// }
// delay(50);
// }
// statAkhirA=statA;
// statAkhirB=statB;
// if(CW){
// CW=0;
// counter++;
// Serial.println(counter);
// }
// if(CCW){
// CCW=0;
// counter--;
// Serial.println(counter);
// }
// }