#include <DS1307RTC.h>
#include <LiquidCrystal_I2C.h>
struct Alarm {
uint8_t hour;
uint8_t minute;
void const (* const function)();
};
uint8_t const ledPin = 9;
LiquidCrystal_I2C lcd(0x27, 16, 2);
DS1307RTC rtc;
void alarm1() {
Serial.println("Alarm 1");
}
void alarm2() {
Serial.println("Alarm 2");
}
Alarm alarms[] = {{0, 0, alarm1}, {0, 0, alarm2}};
void setAlarm() {
char line[10];
Serial.readBytesUntil('\r', line, sizeof(line));
char* ptr = line;
size_t id = strtol(ptr, &ptr, 10);
alarms[id].hour = strtol(ptr + 1, &ptr, 10);
alarms[id].minute = strtol(ptr + 1, &ptr, 10);
}
void showTime(time_t const now) {
char line[17];
sprintf(line, "%02i:%02i:%02i ",
hour(now), minute(now), second(now));
lcd.setCursor(0, 0);
lcd.print(line);
sprintf(line, "%02i-%02i-%04i %i",
day(now), month(now), year(now), weekday(now));
lcd.setCursor(0, 1);
lcd.print(line);
}
void setup() {
Serial.begin(9600);
Serial.println("Please set the alarms.");
pinMode(ledPin, OUTPUT);
lcd.init();
lcd.backlight();
}
void loop() {
if (Serial.available()) {
setAlarm();
}
time_t now = rtc.get();
for (Alarm const& alarm: alarms) {
if (alarm.hour == hour(now) and alarm.minute == minute(now)) {
alarm.function();
}
}
showTime(now);
}
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
lcd1:GND
lcd1:VCC
lcd1:SDA
lcd1:SCL
rtc1:GND
rtc1:5V
rtc1:SDA
rtc1:SCL
rtc1:SQW
led1:A
led1:C
r1:1
r1:2