#include <LiquidCrystal.h>
//กำหนดขา RS, E, D4, D5, D6, D7 ของ LCD ต่อกับขาดิจิตอล ESP32
LiquidCrystal lcd(17, 16, 4, 0, 2, 15);  
int a;
int b;
int c;
String name;
int led1 = 19; // กำหนดขาใช้งาน
int led2 = 18; // กำหนดขาใช้งาน
int led3 = 5; // กำหนดขาใช้งาน
char key = '0' ; //ตัวแปรเก็บค่าที่คอมพิวเตอร์ส่งม
void setup() {
  Serial.begin(115200);  //เริ่มการสื่อสารด้วยความถี่ 115200
  Serial.println("Please enter your name:");
  while (!Serial.available()); // Wait for input
  name = Serial.readStringUntil('\n');
  Serial.print("Hello, ");
  Serial.print(name);
  Serial.println("!");
  pinMode(led1, OUTPUT); // กำหนดขาGPIO 5 เป็น OUTPUT
  pinMode(led2, OUTPUT); // กำหนดขาGPIO 17 เป็น OUTPUT
  pinMode(led3, OUTPUT); // กำหนดขาGPIO 16 เป็น OUTPUT
  digitalWrite(led1, LOW); // LED 1 ดับ
  digitalWrite(led2, LOW);// LED 2 ดับ
  digitalWrite(led3, LOW);// LED 3 ดับ
}
void loop()
{
  if (Serial.available() > 0) { //ถ้าคอมพิวเตอร์ส่งข้อมูลมาใหจะทำใน if นี้
    key = Serial.read(); //นำค่าที่คอมพิวเตอร์ส่งมาเก็บในตัวแปร key
    Serial.print("key : ");
    Serial.println(key); //Arduino ส่งค่าในตัวแปร key เข้าคอมพิวเตอร์ Serial Monitor
  }
  if (key == '0') { //ถ้าตัวแปร key เป็น 0 ให้ทำในปีกกานี้
    a=0;
    b=0;
    c=0;
    digitalWrite(led1, LOW);  // LED 1 ดับ
    digitalWrite(led2, LOW);  // LED 2 ดับ
    digitalWrite(led3, LOW);  // LED 3 ดับ
    Serial.println("LED1 LED2 LED3 OFF");
      lcd.begin(16, 2);    // จอกว้าง 16 ตัวอักษร 2 บรรทัด
      lcd.setCursor(1, 0);    // เซ็ตเคเซอร์ไปบรรทัดบน คอลั่มที่ 5
      lcd.print("Use by");    // แสดงผลคำว่า Use by ออกหน้าจอ
      lcd.setCursor(8, 0);   // เซ็ตเคเซอร์ไปบรรทัดบน คอลั่มที่ 8 
      lcd.print(name);       // แสดงผลค่าในตัวแปร name
      lcd.setCursor(1, 1);    // เซ็ตเคเซอร์ไปบรรทัดล่าง คอลั่มที่ 1
      lcd.print("LED :");    // แสดงผลคำว่า LED : ออกหน้าจอ
      lcd.setCursor(5, 1);    // เซ็ตเคเซอร์ไปบรรทัดล่าง คอลั่มที่ 5
      lcd.print("A=");        // แสดงผลคำว่า A= ออกหน้าจอ
      lcd.setCursor(7, 1);   // เซ็ตเคเซอร์ไปบรรทัดล่าง คอลั่มที่ 7
      lcd.print(a);         // แสดงผลคำในตัวแปร a
      lcd.setCursor(9, 1);    // เซ็ตเคเซอร์ไปบรรทัดล่าง คอลั่มที่ 1
      lcd.print("B=");        // แสดงผลคำว่า B= ออกหน้าจอ
      lcd.setCursor(11, 1);  // เซ็ตเคเซอร์ไปบรรทัดล่าง คอลั่มที่ 11 
      lcd.print(b);         // แสดงผลคำในตัวแปร b
      lcd.setCursor(13, 1);   // เซ็ตเคเซอร์ไปบรรทัดล่าง คอลั่มที่ 13
      lcd.print("C=");        // แสดงผลคำว่า C= ออกหน้าจอ
      lcd.setCursor(15, 1);  // เซ็ตเคเซอร์ไปบรรทัดล่าง คอลั่มที่ 15 
      lcd.print(c);         // แสดงผลคำในตัวแปร c
  }
  if (key == '1') { //ถ้าตัวแปร key เป็น 1 ให้ทำในปีกกานี้
    a=1;
    digitalWrite(led1, HIGH); // LED 1 ติดสว่าง
    Serial.println("LED1 ON");
      lcd.clear();            //ล้างหน้าจอ LCD
      lcd.setCursor(1, 0);    // เซ็ตเคเซอร์ไปบรรทัดบน คอลั่มที่ 5
      lcd.print("Use by");    // แสดงผลคำว่า Use by ออกหน้าจอ
      lcd.setCursor(8, 0);   // เซ็ตเคเซอร์ไปบรรทัดบน คอลั่มที่ 8 
      lcd.print(name);       // แสดงผลค่าในตัวแปร name
      lcd.setCursor(1, 1);    // เซ็ตเคเซอร์ไปบรรทัดล่าง คอลั่มที่ 1
      lcd.print("LED :");    // แสดงผลคำว่า LED : ออกหน้าจอ
      lcd.setCursor(5, 1);    // เซ็ตเคเซอร์ไปบรรทัดล่าง คอลั่มที่ 5
      lcd.print("A=");        // แสดงผลคำว่า A= ออกหน้าจอ
      lcd.setCursor(7, 1);   // เซ็ตเคเซอร์ไปบรรทัดล่าง คอลั่มที่ 7
      lcd.print(a);         // แสดงผลคำในตัวแปร a
      lcd.setCursor(9, 1);    // เซ็ตเคเซอร์ไปบรรทัดล่าง คอลั่มที่ 1
      lcd.print("B=");        // แสดงผลคำว่า B= ออกหน้าจอ
      lcd.setCursor(11, 1);  // เซ็ตเคเซอร์ไปบรรทัดล่าง คอลั่มที่ 11 
      lcd.print(b);         // แสดงผลคำในตัวแปร b
      lcd.setCursor(13, 1);   // เซ็ตเคเซอร์ไปบรรทัดล่าง คอลั่มที่ 13
      lcd.print("C=");        // แสดงผลคำว่า C= ออกหน้าจอ
      lcd.setCursor(15, 1);  // เซ็ตเคเซอร์ไปบรรทัดล่าง คอลั่มที่ 15 
      lcd.print(c);         // แสดงผลคำในตัวแปร c
  }
  if (key == '2') { //ถ้าตัวแปร key เป็น 2 ให้ทำในปีกกานี้
    b=1;
    digitalWrite(led2, HIGH); // LED 2 ติดสว่าง
    Serial.println("LED2 ON");
      lcd.clear();            //ล้างหน้าจอ LCD
      lcd.setCursor(1, 0);    // เซ็ตเคเซอร์ไปบรรทัดบน คอลั่มที่ 5
      lcd.print("Use by");    // แสดงผลคำว่า Use by ออกหน้าจอ
      lcd.setCursor(8, 0);   // เซ็ตเคเซอร์ไปบรรทัดบน คอลั่มที่ 8 
      lcd.print(name);       // แสดงผลค่าในตัวแปร name
      lcd.setCursor(1, 1);    // เซ็ตเคเซอร์ไปบรรทัดล่าง คอลั่มที่ 1
      lcd.print("LED :");    // แสดงผลคำว่า LED : ออกหน้าจอ
      lcd.setCursor(5, 1);    // เซ็ตเคเซอร์ไปบรรทัดล่าง คอลั่มที่ 5
      lcd.print("A=");        // แสดงผลคำว่า A= ออกหน้าจอ
      lcd.setCursor(7, 1);   // เซ็ตเคเซอร์ไปบรรทัดล่าง คอลั่มที่ 7
      lcd.print(a);         // แสดงผลคำในตัวแปร a
      lcd.setCursor(9, 1);    // เซ็ตเคเซอร์ไปบรรทัดล่าง คอลั่มที่ 1
      lcd.print("B=");        // แสดงผลคำว่า B= ออกหน้าจอ
      lcd.setCursor(11, 1);  // เซ็ตเคเซอร์ไปบรรทัดล่าง คอลั่มที่ 11 
      lcd.print(b);         // แสดงผลคำในตัวแปร b
      lcd.setCursor(13, 1);   // เซ็ตเคเซอร์ไปบรรทัดล่าง คอลั่มที่ 13
      lcd.print("C=");        // แสดงผลคำว่า C= ออกหน้าจอ
      lcd.setCursor(15, 1);  // เซ็ตเคเซอร์ไปบรรทัดล่าง คอลั่มที่ 15 
      lcd.print(c);         // แสดงผลคำในตัวแปร c
  }
  if (key == '3') { //ถ้าตัวแปร key เป็น 3 ให้ทำในปีกกานี้
    c=1;
    digitalWrite(led3, HIGH); // LED 3 ติดสว่าง
    Serial.println("LED3 ON");
      lcd.clear();            //ล้างหน้าจอ LCD
      lcd.setCursor(1, 0);    // เซ็ตเคเซอร์ไปบรรทัดบน คอลั่มที่ 5
      lcd.print("Use by");    // แสดงผลคำว่า Use by ออกหน้าจอ
      lcd.setCursor(8, 0);   // เซ็ตเคเซอร์ไปบรรทัดบน คอลั่มที่ 8 
      lcd.print(name);       // แสดงผลค่าในตัวแปร name
      lcd.setCursor(1, 1);    // เซ็ตเคเซอร์ไปบรรทัดล่าง คอลั่มที่ 1
      lcd.print("LED :");    // แสดงผลคำว่า LED : ออกหน้าจอ
      lcd.setCursor(5, 1);    // เซ็ตเคเซอร์ไปบรรทัดล่าง คอลั่มที่ 5
      lcd.print("A=");        // แสดงผลคำว่า A= ออกหน้าจอ
      lcd.setCursor(7, 1);   // เซ็ตเคเซอร์ไปบรรทัดล่าง คอลั่มที่ 7
      lcd.print(a);         // แสดงผลคำในตัวแปร a
      lcd.setCursor(9, 1);    // เซ็ตเคเซอร์ไปบรรทัดล่าง คอลั่มที่ 1
      lcd.print("B=");        // แสดงผลคำว่า B= ออกหน้าจอ
      lcd.setCursor(11, 1);  // เซ็ตเคเซอร์ไปบรรทัดล่าง คอลั่มที่ 11 
      lcd.print(b);         // แสดงผลคำในตัวแปร b
      lcd.setCursor(13, 1);   // เซ็ตเคเซอร์ไปบรรทัดล่าง คอลั่มที่ 13
      lcd.print("C=");        // แสดงผลคำว่า C= ออกหน้าจอ
      lcd.setCursor(15, 1);  // เซ็ตเคเซอร์ไปบรรทัดล่าง คอลั่มที่ 15 
      lcd.print(c);         // แสดงผลคำในตัวแปร c
  }
}