#include <WiFi.h>
#include "time.h"
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define SWITCH_PIN 15
// WiFi
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// OLED Displays
Adafruit_SSD1306 display1(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
Adafruit_SSD1306 display2(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
Adafruit_SSD1306 display3(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
// Save switch state
bool previousSwitchState = HIGH;
String savedTime = "";
String savedDate = "";
bool warningState = false;
bool goodState = false;
void setup() {
Serial.begin(115200);
pinMode(SWITCH_PIN, INPUT_PULLUP);
Wire.begin();
// Initialize Displays
display1.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display2.begin(SSD1306_SWITCHCAPVCC, 0x3D);
display3.begin(SSD1306_SWITCHCAPVCC, 0x3E);
display1.clearDisplay();
display2.clearDisplay();
display3.clearDisplay();
// Connect WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
// NTP Time
configTime(19800, 0, "pool.ntp.org"); // India Time UTC+5:30
}
void loop() {
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) {
return;
}
// Current Time
char timeString[20];
strftime(timeString, sizeof(timeString), "%I:%M:%S %p", &timeinfo);
// Current Date
char dateString[30];
strftime(dateString, sizeof(dateString), "%d-%m-%Y", &timeinfo);
// =========================
// DISPLAY 1 - LIVE TIME
// =========================
display1.clearDisplay();
display1.setTextSize(1);
display1.setTextColor(WHITE);
display1.setCursor(0, 10);
display1.println("LIVE TIME");
display1.setTextSize(2);
display1.setCursor(0, 25);
display1.println(timeString);
display1.setTextSize(1);
display1.setCursor(0, 52);
display1.println(dateString);
display1.display();
// =========================
// SWITCH LOGIC
// =========================
bool switchState = digitalRead(SWITCH_PIN);
// Switch turned ON
if (switchState == LOW && previousSwitchState == HIGH) {
savedTime = String(timeString);
savedDate = String(dateString);
goodState = false;
warningState = false;
}
// Switch turned OFF before 10 AM
if (switchState == HIGH && previousSwitchState == LOW) {
if (timeinfo.tm_hour < 10) {
goodState = true;
warningState = false;
}
}
previousSwitchState = switchState;
// If still ON after 10 AM
if (switchState == LOW && timeinfo.tm_hour >= 10) {
warningState = true;
goodState = false;
}
// =========================
// DISPLAY 2 - SAVED TIME
// =========================
display2.clearDisplay();
display2.setTextSize(1);
display2.setCursor(0, 0);
display2.println("SAVED ON TIME");
display2.setCursor(0, 20);
display2.println(savedTime);
display2.setCursor(0, 40);
display2.println(savedDate);
display2.display();
// =========================
// DISPLAY 3 - STATUS
// =========================
display3.clearDisplay();
display3.setTextSize(2);
display3.setCursor(10, 20);
if (warningState) {
display3.println("WARNING");
} else if (goodState) {
display3.println("GOOD");
} else {
display3.println("WAIT");
}
display3.display();
delay(1000);
}