#include <WiFi.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C LCD = LiquidCrystal_I2C(0x27, 22, 21);
#define LED_PIN 12 // Define the LED pin
#define BUZZER_PIN 5 // Define the buzzer pin
#define NTP_SERVER "time2.nimt.or.th"
#define UTC_OFFSET 25200
#define UTC_OFFSET_DST 0
// Define musical notes
#define NOTE_C4 261
#define NOTE_D4 294
#define NOTE_E4 329
#define NOTE_F4 349
#define NOTE_G4 392
#define NOTE_A4 440
#define NOTE_B4 494
#define NOTE_C5 523
// Define note durations (in milliseconds)
#define DURATION_QUARTER 500
#define DURATION_HALF 1000
#define DURATION_WHOLE 2000
void printLocalTime() {
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) {
LCD.setCursor(0, 1);
LCD.println("Connection Err");
return;
}
LCD.setCursor(8, 0);
LCD.println(String(timeinfo.tm_hour) + ":" + String(timeinfo.tm_min) + ":" + String(timeinfo.tm_sec));
LCD.setCursor(0, 1);
LCD.println(String(timeinfo.tm_mday) + "/" + String(timeinfo.tm_mon + 1) + "/" + String(timeinfo.tm_year + 1900) + " " + " " + "UTC");
}
void setup() {
Serial.begin(115200);
pinMode(LED_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT); // Set the buzzer pin as an output
LCD.init();
LCD.backlight();
LCD.setCursor(0, 0);
LCD.print("Connecting to ");
LCD.setCursor(0, 1);
LCD.print("WiFi ");
WiFi.begin("Wokwi-GUEST", "", 6);
while (WiFi.status() != WL_CONNECTED) {
delay(250);
}
Serial.println("");
Serial.println("WiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
LCD.clear();
LCD.setCursor(0, 0);
LCD.println("Online");
LCD.setCursor(0, 1);
LCD.println("Updating time...");
configTime(UTC_OFFSET, UTC_OFFSET_DST, NTP_SERVER);
}
void buzzerAlarm() {
// Turn on the buzzer for half a second
digitalWrite(BUZZER_PIN, HIGH);
delay(500);
digitalWrite(BUZZER_PIN, LOW);
}
// Play a simple melody
void playMelody() {
int melody[] = {NOTE_C4, NOTE_D4, NOTE_E4, NOTE_F4, NOTE_G4, NOTE_A4, NOTE_B4, NOTE_C5};
int noteDurations[] = {DURATION_QUARTER, DURATION_QUARTER, DURATION_QUARTER, DURATION_QUARTER, DURATION_QUARTER, DURATION_QUARTER, DURATION_QUARTER, DURATION_WHOLE};
for (int i = 0; i < 8; i++) {
tone(BUZZER_PIN, melody[i], noteDurations[i]);
delay(noteDurations[i] * 1.3); // Wait for the note to finish (slight overlap)
}
}
void loop() {
printLocalTime();
struct tm timeinfo;
if (getLocalTime(&timeinfo)) {
int currentSecond = timeinfo.tm_sec;
if (currentSecond == 10) {
digitalWrite(LED_PIN, HIGH);
playMelody(); // Play the melody
delay(2000);
digitalWrite(LED_PIN, LOW);
buzzerAlarm();
}
// else if (currentSecond == 12) {
// digitalWrite(LED_PIN, LOW);
// buzzerAlarm(); // Call the buzzer alarm function
// }
}
delay(250);
}