#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define BUTTON_PIN 12
#define LED_PIN 13
#define BUZZER_PIN 25
#define LED_ALARM_PIN 26
#define LDR_PIN 34
#define LIGHT_THRESHOLD 1000 // Adjust based on your needs
#define BAR_MAX 16 // Number of characters on the bar graph
// OLED display settings
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define SCREEN_ADDRESS 0x3C // Default I2C address for many OLED displays
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
bool ledState = false;
bool lastButtonState = LOW;
bool currentButtonState;
void setup() {
Serial.begin(115200);
// Initialize OLED display
if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
Serial.println(F("SSD1306 allocation failed"));
for (;;); // Infinite loop
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,0);
pinMode(BUTTON_PIN, INPUT_PULLDOWN);
pinMode(LED_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(LED_ALARM_PIN, OUTPUT);
digitalWrite(LED_PIN, LOW);
digitalWrite(BUZZER_PIN, LOW);
digitalWrite(LED_ALARM_PIN, LOW);
}
void loop() {
int sensorValue = analogRead(LDR_PIN);
int barLength = map(sensorValue, 0, 4095, 0, BAR_MAX); // Map LDR value to bar length
currentButtonState = digitalRead(BUTTON_PIN);
if (currentButtonState == HIGH && lastButtonState == LOW) {
ledState = !ledState;
digitalWrite(LED_PIN, ledState ? HIGH : LOW);
delay(50); // Debounce delay
}
lastButtonState = currentButtonState;
if (sensorValue < LIGHT_THRESHOLD) {
digitalWrite(BUZZER_PIN, HIGH);
digitalWrite(LED_ALARM_PIN, HIGH);
} else {
digitalWrite(BUZZER_PIN, LOW);
digitalWrite(LED_ALARM_PIN, LOW);
}
// Clear display and print LDR value and bar graph
display.clearDisplay();
display.setCursor(0,0);
display.print("LDR Value: ");
display.print(sensorValue);
display.setCursor(0,10);
for (int i = 0; i < BAR_MAX; i++) {
if (i < barLength) {
display.write('#'); // Use '#' to represent the bar graph
} else {
display.write(' '); // Empty space for the rest
}
}
display.display();
delay(1000); // Update every second
}