#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
// Pins
#define LDR_PIN 34
#define PIR_PIN 27
#define LED_PIN 2
#define BUZZER 4
int ldrValue = 0;
int motion = 0;
int wasteCount = 0;
void setup() {
Serial.begin(115200);
pinMode(PIR_PIN, INPUT);
pinMode(LED_PIN, OUTPUT);
pinMode(BUZZER, OUTPUT);
// OLED Start
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
}
void loop() {
ldrValue = analogRead(LDR_PIN);
motion = digitalRead(PIR_PIN);
Serial.print("LDR: ");
Serial.print(ldrValue);
Serial.print(" | Motion: ");
Serial.println(motion);
// MAIN LOGIC
if (motion == 1 && ldrValue > 2000) {
digitalWrite(LED_PIN, HIGH); // Light ON
} else {
digitalWrite(LED_PIN, LOW); // Light OFF
}
// ENERGY WASTE DETECTION
if (motion == 0 && digitalRead(LED_PIN) == HIGH) {
tone(BUZZER, 1000); // 🔊 sound ON
} else {
noTone(BUZZER); // 🔇 sound OFF
}
// OLED DISPLAY
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.print("LDR: ");
display.println(ldrValue);
display.setCursor(0,15);
display.print("Motion: ");
display.println(motion);
display.setCursor(0,30);
if (digitalRead(LED_PIN)) {
display.println("Light: ON");
} else {
display.println("Light: OFF");
}
display.setCursor(0,45);
display.print("Waste: ");
display.println(wasteCount);
display.display();
delay(200);
}