FinalCode for ESP32
FinalCode for ESP32
h>
#include "RTClib.h"
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <EEPROM.h>
void saveAlarmsToEEPROM() {
for (int i = 0; i < maxAlarms; i++) {
EEPROM.write(i * 2, alarmHour[i]);
EEPROM.write(i * 2 + 1, alarmMin[i]);
}
EEPROM.commit();
}
void setup() {
Serial.begin(115200);
Wire.begin(I2C_SDA, I2C_SCL);
rtc.begin();
if (rtc.lostPower()) {
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println("OLED not found");
while (1);
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.println("ESP32 Alarm Clock");
display.display();
delay(2000);
pinMode(btnHour, INPUT_PULLUP);
pinMode(btnMin, INPUT_PULLUP);
pinMode(btnSwitch, INPUT_PULLUP);
pinMode(btnStop, INPUT_PULLUP);
pinMode(buzzer, OUTPUT);
digitalWrite(buzzer, LOW);
EEPROM.begin(EEPROM_SIZE);
for (int i = 0; i < maxAlarms; i++) {
alarmHour[i] = EEPROM.read(i * 2);
alarmMin[i] = EEPROM.read(i * 2 + 1);
if (alarmHour[i] > 23) alarmHour[i] = 0;
if (alarmMin[i] > 59) alarmMin[i] = 0;
}
}
void loop() {
DateTime now = rtc.now();
updateOLED(now);
lastBtnHour = stateHour;
lastBtnMin = stateMin;
lastBtnSwitch = stateSwitch;
delay(200);
}
display.setCursor(0, 16);
display.print("Alarm "); display.print(currentAlarm + 1); display.print(": ");
print2Digits(display, alarmHour[currentAlarm]);
display.print(":");
print2Digits(display, alarmMin[currentAlarm]);
display.display();
}