#include <Wire.h> // Wire-bibliotheek voor I2C-communicatie
#include <LiquidCrystal_I2C.h> //LiquidCrystal_I2C-bibliotheek voor het aansturen van het LCD-scherm
#include <RTClib.h> // RTClib-bibliotheek voor het werken met de DS1307 RTC-module
// Maak een object aan voor de RTC (clock)
RTC_DS1307 clockModule;
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
// Definieer het adres en het aantal karakters van het LCD-scherm (20x4)
#define LCD_ADDR 0x27
#define LCD_COLS 20
#define LCD_ROWS 4
// Maak een object aan voor het LCD-scherm
LiquidCrystal_I2C lcd(LCD_ADDR, LCD_COLS, LCD_ROWS);
void setup() {
// Initialiseer serial monitor voor debugging
Serial.begin(115200);
// Initialiseer het LCD-scherm en activeer backlight
lcd.init();
lcd.backlight();
// Initialiseer de communicatie met de RTC
Wire.begin();
if (!clockModule.begin()) {
Serial.println("Couldn't find RTC");
Serial.flush();
abort();
} else {
Serial.println("Clock module found");
}
}
void CheckTime(){
// Haal de huidige datum en tijd op van de RTC
DateTime now = clockModule.now();
// print ze uit om te controleren of het werkt
Serial.print("Current time: ");
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(" (");
Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
Serial.print(") ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
}
void DisplayTimeOnScreen(DateTime now) {
// Format de datum- en tijdstrings met voorloopnullen
String dateTimeString = String(now.day()) + "/" + String(now.month()) + "/" + String(now.year()) + " ";
dateTimeString += String(now.hour()) + ":" + (now.minute() < 10 ? "0" : "") + String(now.minute()) + ":";
dateTimeString += (now.second() < 10 ? "0" : "") + String(now.second());
String dayOfTheWeek = "Today is: " + String(daysOfTheWeek[now.dayOfTheWeek()]);
// Toon de datum en tijd op de eerste rij
lcd.setCursor(0, 0);
lcd.print(dateTimeString);
// Toon de dag van de week op de tweede rij
lcd.setCursor(0, 1);
lcd.print(dayOfTheWeek);
}
void loop() {
DateTime now = clockModule.now();
CheckTime();
DisplayTimeOnScreen(now);
delay(1000); // Wacht 1 seconde voordat het display opnieuw wordt bijgewerkt
}