#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
Adafruit_SSD1306 display(128, 64, &Wire, -1); // OLED display object
int pinSensor = 23;
int buzzerPin = 27;
int buttonPin = 17;
int ledAlarmPin = 14;
int ledStandbyPin = 18;
int ledNotStandbyPin = 19;
bool statusIR = false;
bool status = true;
unsigned long prevTime = 0;
int scrollPosition = 128;
unsigned long prevScrollTime = 0;
const char* deviceStatus = "Active";
const char* objectStatus = "Not Detected";
void setup() {
Serial.begin(115200);
Serial.println("ESP32 PIR Sensor Test");
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3C (for 128x64)
display.display();
delay(3000);
display.clearDisplay();
pinMode(pinSensor, INPUT);
pinMode(buttonPin, INPUT_PULLUP);
pinMode(ledAlarmPin, OUTPUT);
pinMode(ledStandbyPin, OUTPUT);
pinMode(ledNotStandbyPin, OUTPUT);
}
void loop() {
// logika untuk memperbarui status alat
if (digitalRead(buttonPin) == LOW) {
tone(buzzerPin, 282, 150); // Plays 262Hz tone for 0.250 seconds
delay(50);
if (status) {
status = false;
deviceStatus = "Not Active";
} else {
status = true;
deviceStatus = "Active";
}
}
// logika untuk menyalakan lampu status alat
if (status) {
digitalWrite(ledStandbyPin, LOW);
digitalWrite(ledNotStandbyPin, HIGH);
} else {
digitalWrite(ledStandbyPin, HIGH);
digitalWrite(ledNotStandbyPin, LOW);
}
// logika untuk deteksi objek bernyawa
if (digitalRead(pinSensor) && status == true) {
unsigned long currentTime = millis();
unsigned long timeDifference = (currentTime - prevTime);
objectStatus = "Detected!";
if (timeDifference > 200) {
tone(buzzerPin, 521, 150); // Plays 262Hz tone for 0.250 seconds
digitalWrite(ledAlarmPin, HIGH);
prevTime = currentTime;
}
digitalWrite(ledAlarmPin, LOW);
} else {
objectStatus = "Not Detected!";
}
// untuk setting display ke OLED
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.print("SMART SECURITY SISTEM");
display.setCursor(0, 24);
display.print("Status : ");
display.setCursor(0, 34);
display.print("Object : ");
display.setCursor(scrollPosition, 56);
display.print("Sistem keamanan berbasis sensor gerak dan notifikasi buzzer serta LED");
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(50, 24);
display.print(deviceStatus);
display.setCursor(50, 34);
display.print(objectStatus);
display.display();
display.clearDisplay();
// Scrolling effect
scrollPosition--;
if (scrollPosition < -430) {
scrollPosition = 128; // Reset scroll position ke awal jika sudah selesai scrolling
}
delay(1); // speed scrolling effect
}