#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
// OLED setup
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
// Pins
int pirPin = 2;
int ledPin = 7;
// Variables
int motionCount = 0;
bool lastState = LOW;
void setup() {
pinMode(pirPin, INPUT);
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
// OLED init
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
while(true);
}
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.print("System Ready");
display.display();
delay(2000);
display.clearDisplay();
}
void loop() {
bool motion = digitalRead(pirPin);
// Detect rising edge (LOW → HIGH)
if (motion == HIGH && lastState == LOW) {
motionCount++; // Count only once per motion
digitalWrite(ledPin, HIGH);
// Display on OLED
display.clearDisplay();
display.setCursor(0, 0);
display.print("Motion:");
display.setCursor(0, 30);
display.print(motionCount);
display.display();
delay(500); // small delay for stability
}
// Turn LED OFF when no motion
if (motion == LOW) {
digitalWrite(ledPin, LOW);
}
lastState = motion;
}