#include <LiquidCrystal_I2C.h> //ประกาศlib ของLCD
#include <RTClib.h> //ประกาศlib ของRTC
#define OnBoardLED 13 //ประกาศOnBoardLED เป็นขา13
#define OUT1 12 //ประกาศOUT1 เป็นขา2
#define OUT2 11 //ประกาศOUT2 เป็นขา3
const int buttonPin = 3;
const int OUT3 = 10;
bool ledState = false;
LiquidCrystal_I2C mylcd(0x27, 16, 2); //เรียกใช้lcd 20ตัว 4 บรรทัด
RTC_DS1307 myRTC; //เรียกใช้RTC_DS1307
int analogPin = 3;
int buttonState = 0 ; //ประกาศ analogPin เป็นขาanalog3
int h,m,s ;
unsigned char Cx=0;
unsigned long PrevTime,Nowtime;
DateTime RTC_Now;
void setLedState(bool state)
{
ledState = state;
digitalWrite(OUT3, ledState);
}
void setup()
{
pinMode(OnBoardLED, OUTPUT); //กำหนดOnBoardLED เป็นOUTPUT
pinMode(OUT1, OUTPUT); //กำหนดOUT1 เป็นOUTPUT
pinMode(OUT2, OUTPUT); //กำหนดOUT2 เป็นOUTPUT
pinMode(buttonPin, INPUT);
pinMode(OUT3, OUTPUT);
Serial.begin(9600); //เริ่มใช้งานserial monitor
Serial.println("MY PROJECT"); //ส่งข้อความMY PROJECT ออกserial monitor
mylcd.init(); //เปิดใช้งาน lcd init
mylcd.backlight(); //เปิดใช้งาน lcd backlight
// mylcd.setCursor(0, 0); mylcd.print("MY PROJECT"); //ส่งข้อความMY PROJECT ออกlcd ตำเเหน่งที่0 บรรทัดที0
mylcd.setCursor(0, 0); mylcd.print("Time:"); //ส่งข้อความTIME: ออกlcd ตำเเหน่งที่0 บรรทัดที1
mylcd.setCursor(0, 1); mylcd.print("Day:"); //ส่งข้อความDay: ออกlcd ตำเเหน่งที่0 บรรทัดที2
//mylcd.setCursor(0, 3);mylcd.print("64332310011-6");
myRTC.begin(); //เริ่มใช้งานRTC
}
void LightControl() //ฟังชันการทำงานเปิด/ปิดตามความสว่าง
{
int sensorValue = analogRead(analogPin);
Serial.println("Lux is : " + String(sensorValue));
if(sensorValue < 500 || h == 6 && m == 0 ) //ถ้าความสว่างน้อยกว่า500 OUTจะlow
{
digitalWrite(OUT2, LOW);
}
if((sensorValue > 700)|| h == 10 && m == 13 ) //ถ้าความสว่างมากกว่า700 OUTจะHIGH
{
digitalWrite(OUT2, HIGH);
}
}
void TIME ()
{
Nowtime = millis();
if(Nowtime >= (PrevTime+100))
{
if(Cx==0) digitalWrite(OnBoardLED, HIGH);
else if(Cx==3) digitalWrite(OnBoardLED, LOW);
if(Cx == 9)
{
Cx = 0;
//****************************//
RTC_Now = myRTC.now();
LightControl();
int h = RTC_Now.hour() ;
int m = RTC_Now.minute() ;
int s = RTC_Now.second() ;
mylcd.setCursor(5,0); mylcd.print(RTC_Now.hour());
mylcd.print(":"); mylcd.print(RTC_Now.minute());
mylcd.print(":"); mylcd.print(RTC_Now.second());
Serial.print(RTC_Now.hour());
Serial.print(":"); Serial.print(RTC_Now.minute());
Serial.print(":"); Serial.println(RTC_Now.second());
//--------------------------------
mylcd.setCursor(5,1); mylcd.print(RTC_Now.day());
mylcd.print("/"); mylcd.print(RTC_Now.month());
mylcd.print("/"); mylcd.print(RTC_Now.year());
Serial.print(RTC_Now.day());
Serial.print("/");Serial.print(RTC_Now.month());
Serial.print("/");Serial.println(RTC_Now.year());
}
else Cx++;
PrevTime = Nowtime;
}
}
void loop()
{
TIME ();
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH)
{
setLedState(!ledState);
delay(250);
}
}