#include <LiquidCrystal.h> //เรียกใช้ Library ของขจอ LCD
#include <Wire.h>
#include "RTClib.h"
#include "DHT.h"
#include <Keypad.h>

// ตัวอย่าง LiquidCrystal lcd(rs, E, D4, D5, D6, D7);
LiquidCrystal lcd(A2,A0, 10, 9, 8, 7); //เซ็ตพอร์ตที่ต่อ LCD
// 117 + 3 = 120
RTC_DS1307 rtc;
DHT dht (2 , DHT22 ) ;


/* Keypad setup */
const byte KEYPAD_ROWS = 4;
const byte KEYPAD_COLS = 4;
byte rowPins[KEYPAD_ROWS] = { 6, 5, 4, 3};
byte colPins[KEYPAD_COLS] = {12, 0, A1, A3};
char keys[KEYPAD_ROWS][KEYPAD_COLS] = {
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '3', 'D'}
};

Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, KEYPAD_ROWS, KEYPAD_COLS);


char month[12][4] = {"01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"};
  



byte customChar1[] = {
  B00000,
  B00000,
  B00000,
  B11010,
  B11010,
  B01010,
  B01111,
  B01011
};
byte customChar2[] = {
  B00000,
  B00000,
  B00001,
  B11010,
  B01100,
  B01010,
  B01010,
  B01110
};
byte customChar3[] = {
  B00010,
  B01110,
  B11110,
  B00000,
  B01110,
  B10010,
  B00010,
  B00110
};
byte customChar4[] = {
  B00111,
  B00100,
  B00000,
  B01110,
  B01000,
  B01110,
  B00010,
  B01110
};




void setup() {
  lcd.begin(20, 4); //เซ็ตขนาด LCD ที่ต่อ 20*4
  lcd.setCursor(0,0);
  lcd.print("Chanawee 632021117");

  //นำตัวเก็บข้อมูลอักษรมาเปลี่ยนเป็นตัวแปรตามลำดับ
  lcd.createChar(1, customChar1); //ตัวแปร 1 สร้างอักษรลำดับที่ 2 โดยมี customChar1 เป็นตัวอย่าง
  lcd.createChar(2, customChar2);
  lcd.createChar(3, customChar3);
  lcd.createChar(4, customChar4);

  //สร้างและแสดงผลตัวอักษรภาษาไทย 
  lcd.setCursor(8, 1); 
  lcd.write((byte)2); 
  lcd.setCursor(9, 1); 
  lcd.write((byte)1); 
  lcd.setCursor(10, 1); 
  lcd.write((byte)3); 
  lcd.setCursor(11, 1); 
  lcd.write((byte)4); 


 
  if (! rtc.begin()) {
    Serial.println("-----");
    Serial.flush();
    abort();
  }

  dht.begin();
  float h = dht.readHumidity();    // อ่านค่าความชื้นจากเซ็นเซอร์ไปเก็บไว้ที่ ตัวแปร h 
   lcd.setCursor(0, 3); 
   lcd.print("HUM ");        // พิมพ์ข้อความ Humidity บนจอ LCD
   lcd.print(h,0);                   // พิมพ์ค่า ความชื้นที่เก็บอยู่ในตัวแปร h ลงบนจอ LCD
   lcd.print("%");                 // พิมพ์ข้อความ % บนจอ LCD 


   lcd.print("  ");
  float t = dht.readTemperature(); // อ่านค่าอุณหภูมิจากเซ็นเซอร์ไปเก็บไว้ที่ตัวแปร t

   lcd.print("TEMP ");    // พิมพ์ข้อความ Temperature บนจอ LCD 
   lcd.print(t,1);                  // พิมพ์ค่า อุณหภูมิ ที่เก็บอยู่ในตัวแปร t ลงบนจอ LCD
   lcd.print("C");                // พิมพ์ข้อความ C บนจอ LCD

   delay(1000);


  pinMode(11, OUTPUT);
}


void loop()
 {

   DateTime now = rtc.now();
  lcd.setCursor (0, 2);
  lcd.print(now.day(), DEC);
  lcd.print("/");
  lcd.print(month[now.month()]);
  lcd.print("/");
  lcd.print(now.year()+543, DEC);
  lcd.print(" - ");
  lcd.print(now.hour(), DEC);
  lcd.print(':');
  lcd.print(now.minute(), DEC);
  lcd.print(':');
  lcd.print(now.second(), DEC);
  lcd.setCursor (0, 2);
  lcd.print("");


   char key = keypad.getKey();
   if(key=='2'){digitalWrite(11, HIGH);tone(13,1500);delay(100);noTone(13);}
   if(key=='0'){digitalWrite(11, LOW);tone(13,2000);delay(100);noTone(13);}

}
GND5VSDASCLSQWRTCDS1307+