#include <LiquidCrystal_I2C.h>
#include "RTClib.h"
LiquidCrystal_I2C lcd(0x27, 16, 2);
RTC_DS1307 rtc;
void setup() {
rtc.begin();
pinMode(13, OUTPUT);
pinMode(8, INPUT_PULLUP);
pinMode(9, INPUT_PULLUP);
pinMode(10, INPUT_PULLUP);
Serial.begin(115200);
lcd.init();
lcd.backlight();
}
////////////Current Time
int h = 00; //กำหนด
int m = 00;
int s = 00;
int st = 0;
int h1 = 00; //กำหนด Start
int m1 = 00;
int s1 = 00;
int h2 = 00; //กำหนด Stop
int m2 = 00;
int s2 = 00;
void loop() {
int sw1 = digitalRead(8);
delay(500);
if (sw1 == 0) {
st++;
Serial.println(st);
if (st >= 7) {
st = 0;
lcd.clear();
}
}
if (st == 0) {
time();
check();
}
else {
start();
stop();
}
}
// end loop
void start() { ////////////////////////////////////////////Start
if (st == 1) { //ตั้ง ชม.
int sw2 = digitalRead(9); // Up
delay(100);
if (sw2 == 0) {
h1++;
if (h1 >= 24) {
h1 = 0;
}
}
int sw3 = digitalRead(10); /////////////////////////// Down
delay(50);
if (sw3 == 0) {
h1--;
if (h1 <= -1) {
h1 = 23;
}
}
lcd.setCursor(6, 0); //แสดงกระพริบตำแหน่่ง ชม.
lcd.print(" ");
delay(500);
}
if (st == 2) { //ตั้ง นาที
int sw2 = digitalRead(9); // Up
delay(50);
if (sw2 == 0) {
m1++;
if (m1 >= 60) {
m1 = 0;
}
}
int sw3 = digitalRead(10); /////////////////////////// Down
delay(50);
if (sw3 == 0) {
m1--;
if (m1 <= 0) {
m1 = 59;
}
}
lcd.setCursor(9, 0); //แสดงกระพริบตำแหน่่ง ชม.
lcd.print(" ");
delay(500);
}
if (st == 3) { //ตั้ง วินาที
int sw2 = digitalRead(9); // Up
delay(100);
if (sw2 == 0) {
s1++;
if (s1 >= 60) {
s1 = 0;
}
}
int sw3 = digitalRead(10); /////////////////////////// Down
delay(50);
if (sw3 == 0) {
s1--;
if (s1 <= 0) {
s1 = 59;
}
}
lcd.setCursor(12, 0); //แสดงกระพริบตำแหน่่ง ชม.
lcd.print(" ");
delay(500);
}
lcd.setCursor(0, 0);
lcd.print("Start");
///////////////////////////Hour
lcd.setCursor(6, 0);
if (h1 <= 9) {
lcd.print("0");
}
lcd.print(h1);
lcd.setCursor(8, 0);
lcd.print(":");
///////////////////////////Minute
lcd.setCursor(9, 0);
if (m1 <= 9) {
lcd.print("0");
}
lcd.print(m1);
///////////////////////////Minute
lcd.setCursor(11, 0);
lcd.print(":");
lcd.setCursor(12, 0);
if (s1 <= 9) {
lcd.print("0");
}
lcd.print(s1);
}
void stop() { /////////////////////////////////////////Stop
if (st == 4) { //ตั้ง ชม.
int sw2 = digitalRead(9); // Up
delay(100);
if (sw2 == 0) {
h2++;
if (h2 >= 24) {
h2 = 0;
}
}
int sw3 = digitalRead(10); /////////////////////////// Down
delay(50);
if (sw3 == 0) {
h2--;
if (h2 <= -1) {
h2 = 23;
}
}
lcd.setCursor(6, 1); //แสดงกระพริบตำแหน่่ง ชม.
lcd.print(" ");
delay(500);
}
if (st == 5) { //ตั้ง นาที
int sw2 = digitalRead(9); // Up
delay(50);
if (sw2 == 0) {
m2++;
if (m2 >= 60) {
m2 = 0;
}
}
int sw3 = digitalRead(10); /////////////////////////// Down
delay(50);
if (sw3 == 0) {
m2--;
if (m2 <= 0) {
m2 = 59;
}
}
lcd.setCursor(9, 1); //แสดงกระพริบตำแหน่่ง ชม.
lcd.print(" ");
delay(500);
}
if (st == 6) { //ตั้ง วินาที
int sw2 = digitalRead(9); // Up
delay(50);
if (sw2 == 0) {
s2++;
if (s2 >= 60) {
s2 = 0;
}
}
int sw3 = digitalRead(10); /////////////////////////// Down
delay(50);
if (sw3 == 0) {
s2--;
if (s1 <= 0) {
s2 = 59;
}
}
lcd.setCursor(12, 1); //แสดงกระพริบตำแหน่่ง ชม.
lcd.print(" ");
delay(500);
}
lcd.setCursor(0, 1);
lcd.print("Stop");
///////////////////////////Hour
lcd.setCursor(6, 1);
if (h2 <= 9) {
lcd.print("0");
}
lcd.print(h2);
lcd.setCursor(8, 1);
lcd.print(":");
///////////////////////////Minute
lcd.setCursor(9, 1);
if (m2 <= 9) {
lcd.print("0");
}
lcd.print(m2);
///////////////////////////Second
lcd.setCursor(11, 1);
lcd.print(":");
lcd.setCursor(12, 1);
if (s2 <= 9) {
lcd.print("0");
}
lcd.print(s2);
}
////////////////////////////////////Function Time
void time() {
DateTime now = rtc.now();
////////////////////////////อ่านเวลามาจาก rtc
h = now.hour();
m = now.minute();
s = now.second();
//////////แสดง lcd ที่แถว 0
lcd.setCursor(0, 0);
lcd.print("Time");
///////////////////////////Hour
lcd.setCursor(6, 0);
if (h <= 9) {
lcd.print("0");
}
lcd.print(h);
lcd.setCursor(8, 0);
lcd.print(":");
///////////////////////////Minute
lcd.setCursor(9, 0);
if (m <= 9) {
lcd.print("0");
}
lcd.print(m);
///////////////////////////Minute
lcd.setCursor(11, 0);
lcd.print(":");
lcd.setCursor(12, 0);
if (s <= 9) {
lcd.print("0");
}
lcd.print(s);
}
void check() {
if (h == h1 && m == m1) {
digitalWrite(13, HIGH);
}
if (h == h2 && m == m2) {
digitalWrite(13, 0);
}
}