// Date, Time and Alarm functions using a DS3231 RTC connected via I2C and Wire lib
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
#include "Wire.h"
#include "SPI.h" // not used here, but needed to prevent a RTClib compile error
#include "RTClib.h"
RTC_DS3231 RTC;
int light = 13;
int pum = 8;
void setup () {
lcd.begin();
lcd.setCursor(5, 0);
lcd.print("SMART FARM");
pinMode(light, OUTPUT);
pinMode(pum, OUTPUT);
Serial.begin(9600);
Wire.begin();
RTC.begin();
//RTC.adjust(DateTime(__DATE__, __TIME__));
if (! RTC.isrunning()) {
Serial.println("RTC is NOT running!");
// following line sets the RTC to the date & time this sketch was compiled
RTC.adjust(DateTime(__DATE__, __TIME__));
}
DateTime now = RTC.now();
/* ตั้งเวลา ในตัวอย่างนี้ เซตค่าเป็นเวลา 23:09 ถ้าถึงเวลานี้จะให้ทำงานที่ฟังก์ชัน
RTC.setAlarm1Simple(23, 9);
if (RTC.checkIfAlarm(1)) {
Serial.println("Alarm Triggered");
}*/
RTC.setAlarm1Simple(21, 35);
RTC.turnOnAlarm(1);
RTC.setAlarm1Simple(21, 36);
RTC.turnOnAlarm(2);
if (RTC.checkAlarmEnabled(1)) {
Serial.println("Alarm Enabled");
}
}
void loop () {
DateTime now = RTC.now();
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(' ');
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
lcd.setCursor(1, 1);
lcd.print(now.year(), DEC);
lcd.print('/');
lcd.print(now.month(), DEC);
lcd.print('/');
lcd.print(now.day(), DEC);
//lcd.print(' ');
lcd.setCursor(11, 1);
lcd.print(now.hour(), DEC);
lcd.print(':');
lcd.print(now.minute(), DEC);
lcd.print(':');
lcd.print(now.second(), DEC);
if (RTC.checkIfAlarm(1)) {
Serial.println("ledlight ON");
digitalWrite(light, HIGH);
}
if (RTC.checkIfAlarm(2)) {
Serial.println("ledlight ON");
digitalWrite(pum, HIGH);
}
/*
if (now.hour == 21)
{
digitalWrite(light,HIGH);
}
*/
lcd.setCursor(1, 2);
lcd.print("Tempeature = ");
Serial.println();
Serial.print("Tempeature = ");
Serial.print(RTC.getTemperature()); // คำสั่งดึงอุณหภูมิออกมาแสดง
lcd.print(RTC.getTemperature()); // คำสั่งดึงอุณหภูมิออกมาแสดง
lcd.print('C');
Serial.println("C");
Serial.println();
delay(1000);
}
ตั้งกี่เวลาก็ได้ โดยดึงค่าเวลามาเก็บไว้ในตัวแปร string แล้วใช้ if ตรวจสอบครับ
การดึงค่าวันที่/เวลา ตามตัวอย่างโคดนี้
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(' ');
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
ตัวอย่างการ เปรียบเทียบ string ตามนี้ครับ
https://www.arduino.cc/en/Tutorial/StringComparisonOperators