#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
char input;
char state = '0';
//==============================================================< setup >
void setup() {
Serial.begin(9600);
Serial.print(" ");
pinMode(2, OUTPUT); // in case 2
pinMode(13, OUTPUT); // in case 1
pinMode(A0, INPUT); // in case 3
lcd.init(); // lcd.begin();
lcd.backlight();
lcd.setCursor(4, 0); lcd.print("< Case 0 >");
}
//==============================================================< loop >
void loop() {
switch(state){
//----------------------------------- case 0
case '0':
if(Serial.available() > 0){ //เช็คข้อมูลว่าเข้ามารึยัง
input = Serial.read(); //เก็บข้อมูลที่เราพพิมพ์มาจริงๆ
if(input == '1' or input == '2'){ //กรองข้อมูลที่สมบูรณ์
state = input;
lcd.clear(); // ล้างหน้าจอ
}
}
else{ // ถ้าไม่มีข้อมูลมาจากคีบอร์ดเลย
lcd.setCursor(4, 0); lcd.print("< Case 0 >");
lcd.setCursor(0, 2); lcd.print("press 1: case I");
lcd.setCursor(0, 3); lcd.print("press 2: case II");
}
break;
//----------------------------------- case 1
case '1':
if(Serial.available() > 0){ //เช็คข้อมูลว่าเข้ามารึยัง
input = Serial.read(); //เก็บข้อมูลที่เราพพิมพ์มาจริงๆ
if(input == 'q'){ //กรองข้อมูลที่สมบูรณ์
state = '0';
lcd.clear(); // ล้างหน้าจอ
}
if(input == 'e'){ //กรองข้อมูลที่สมบูรณ์
state = '3';
lcd.clear(); // ล้างหน้าจอ
}
if(input == '1'){ // LED on
digitalWrite(2, 1);
}
if(input == '0'){ // LED off
digitalWrite(2, 0);
}
}
else{ // ถ้าไม่มีข้อมูลมาจากคีบอร์ดเลย
lcd.setCursor(4, 0); lcd.print("< Case 2 >");
lcd.setCursor(8, 1); lcd.print("LED2");
lcd.setCursor(3, 2); lcd.print("1:ON || 0:OFF");
lcd.setCursor(0, 3); lcd.print("[q] back");
lcd.setCursor(11, 3); lcd.print("[e] Poten");
}
break;
//----------------------------------- case 2
case '2':
if(Serial.available() > 0){ //เช็คข้อมูลว่าเข้ามารึยัง
input = Serial.read(); //เก็บข้อมูลที่เราพพิมพ์มาจริงๆ
if(input == 'q'){ //กรองข้อมูลที่สมบูรณ์
state = '0';
lcd.clear(); // ล้างหน้าจอ
}
if(input == 'e'){ //กรองข้อมูลที่สมบูรณ์
state = '4';
lcd.clear(); // ล้างหน้าจอ
}
if(input == '1'){ // LED on
digitalWrite(13, 1);
}
if(input == '0'){ // LED off
digitalWrite(13, 0);
}
}
else{ // ถ้าไม่มีข้อมูลมาจากคีบอร์ดเลย
lcd.setCursor(4, 0); lcd.print("< Case 1 >");
lcd.setCursor(8, 1); lcd.print("LED1");
lcd.setCursor(3, 2); lcd.print("1:ON || 0:OFF");
lcd.setCursor(0, 3); lcd.print("[q] back");
lcd.setCursor(12, 3); lcd.print("[e] next");
}
break;
//----------------------------------- case 3
case '3':
if(Serial.available() > 0){ //เช็คข้อมูลว่าเข้ามารึยัง
input = Serial.read(); //เก็บข้อมูลที่เราพพิมพ์มาจริงๆ
if(input == 'q'){ //กรองข้อมูลที่สมบูรณ์
state = '1';
lcd.clear(); // ล้างหน้าจอ
}
}
else{ // ถ้าไม่มีข้อมูลมาจากคีบอร์ดเลย
lcd.setCursor(4, 0); lcd.print("< Case 3 >");
int poten = analogRead(A0);
poten = map(poten, 0, 1023, 0, 100); // map(variable, oldmin, oldmax, newmin, newmax)
// if(poten == 100 || poten == 0){
// lcd.clear();
// }
lcd.setCursor(5, 2); lcd.print("Poten: " + String(poten) + "% ");
lcd.setCursor(0, 3); lcd.print("[q] back");
}
break;
//----------------------------------- case 4
case '4':
if(Serial.available() > 0){ //เช็คข้อมูลว่าเข้ามารึยัง
input = Serial.read(); //เก็บข้อมูลที่เราพพิมพ์มาจริงๆ
if(input == 'q'){ //กรองข้อมูลที่สมบูรณ์
state = '1';
lcd.clear(); // ล้างหน้าจอ
}
}
else{ // ถ้าไม่มีข้อมูลมาจากคีบอร์ดเลย
lcd.setCursor(4, 0); lcd.print("< Case 4 >");
int Lux = analogRead(A1);
Lux = map(Lux, 0, 1023, 0, 100); // map(variable, oldmin, oldmax, newmin, newmax)
lcd.setCursor(7, 2); lcd.print("Lux: " + String(Lux) + "% ");
lcd.setCursor(0, 3); lcd.print("[q] back");
}
break;
}
}
// if(Serial.available() > 0){ //เช็คข้อมูลว่าเข้ามารึยัง
// input = Serial.read(); //เก็บข้อมูลที่เราพพิมพ์มาจริงๆ
// Serial.println(input);
// if(input == '0' or input == '1' or input == '2'){
// state = input;
// // Serial.println(state);
// }
// }