#include <LiquidCrystal_I2C.h>
#include <Wire.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
#define atas digitalRead(12)==0
#define bawah digitalRead(11)==0
#define enter digitalRead(10)==0
#define back digitalRead(9)==0
char state;
int PS_hz = 0;
int STB_hz = 0;
float coef;
//millis
uint32_t LCD;
void setup() {
Serial.begin(9600);
pinMode(12, INPUT_PULLUP);
pinMode(11, INPUT_PULLUP);
pinMode(10, INPUT_PULLUP);
pinMode(9, INPUT_PULLUP);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Selamat Datang");
delay(1000);
lcd.clear();
}
void loop() {
if (millis() - LCD >= 200){
LCD = millis();
show();
}
}
void show(){
switch(state){
case 0:
lcd.setCursor(0,0);
lcd.print("Freq");
lcd.setCursor(0,1);
lcd.print("RPM");
lcd.setCursor(10,0);
lcd.print("Koef");
lcd.setCursor(10,1);
lcd.print("GPS");
lcd.setCursor(8,0);
lcd.print("<");
if(atas){
lcd.clear();
state = 3;
}else if(bawah){
lcd.clear();
state = 1;
}else if(enter){
lcd.clear();
state = 4;
}
break;
case 1:
lcd.setCursor(0,0);
lcd.print("Freq");
lcd.setCursor(0,1);
lcd.print("RPM");
lcd.setCursor(10,0);
lcd.print("Koef");
lcd.setCursor(10,1);
lcd.print("GPS");
lcd.setCursor(8,1);
lcd.print("<");
if(atas){
lcd.clear();
state = 0;
}else if(bawah){
lcd.clear();
state = 2;
}else if(enter){
lcd.clear();
state = 5;
}
break;
case 2:
lcd.setCursor(0,0);
lcd.print("Freq");
lcd.setCursor(0,1);
lcd.print("RPM");
lcd.setCursor(10,0);
lcd.print("Koef");
lcd.setCursor(10,1);
lcd.print("GPS");
lcd.setCursor(15,0);
lcd.print("<");
if(atas){
lcd.clear();
state = 1;
}else if(bawah){
lcd.clear();
state = 3;
}else if(enter){
lcd.clear();
state = 6;
}
break;
case 3:
lcd.setCursor(0,0);
lcd.print("Freq");
lcd.setCursor(0,1);
lcd.print("RPM");
lcd.setCursor(10,0);
lcd.print("Koef");
lcd.setCursor(10,1);
lcd.print("GPS");
lcd.setCursor(15,1);
lcd.print("<");
if(atas){
lcd.clear();
state = 2;
}else if(bawah){
lcd.clear();
state = 0;
}else if(enter){
lcd.clear();
state = 7;
}
break;
case 4:
lcd.setCursor(0,0);
lcd.print("PS");
lcd.setCursor(4,0);
lcd.print(PS_hz);
lcd.setCursor(0,1);
lcd.print("STB");
lcd.setCursor(4,1);
lcd.print(STB_hz);
if(back){
lcd.clear();
state = 0;
}
break;
case 5:
lcd.setCursor(0,0);
lcd.print("PS");
lcd.setCursor(4,0);
lcd.print(PS_RPM);
lcd.setCursor(0,1);
lcd.print("STB");
lcd.setCursor(4,1);
lcd.print(STB_RPM);
if(back){
lcd.clear();
state = 1;
}
break;
case 6:
lcd.setCursor(0,0);
lcd.print("Koefisien RPM");
lcd.setCursor(0,1);
lcd.print(coef);
if(back){
lcd.clear();
state = 2;
}
break;
}
}
void countRpm(int hz, float pole){
int RPM = (hz*120)/pole;
return RPM;
}