#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
// Konfiguracja OLED
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
// Piny
int ledPin = 13; // LED
int buzzerPin = 8; // Buzzer
int inputPin = 2; // Czujnik PIR
int pirState = LOW; // Stan PIR
int val = 0; // Odczyt z PIR
// Komunikacja Bluetooth
#include <SoftwareSerial.h>
SoftwareSerial BT(10, 11); // RX, TX dla HC-05
void setup() {
// Konfiguracja pinów
pinMode(ledPin, OUTPUT);
pinMode(buzzerPin, OUTPUT);
pinMode(inputPin, INPUT);
// Inicjalizacja OLED
if (!display.begin(SSD1306_WHITE, 0x3C)) { // Zmiana tutaj
Serial.println(F("Nie można uruchomić OLED!"));
for (;;);
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
// Inicjalizacja Bluetooth
BT.begin(9600);
// Start Serial
Serial.begin(9600);
// Powitanie
displayMessage("System Alarmowy", "Czekam na ruch...");
}
void loop() {
val = digitalRead(inputPin); // Odczyt z PIR
if (val == HIGH) { // Ruch wykryty
digitalWrite(ledPin, HIGH); // LED ON
tone(buzzerPin, 1000); // Dźwięk buzzera
if (pirState == LOW) {
// Zmiana stanu PIR
displayMessage("ALARM!", "Wykryto ruch!");
Serial.println("Motion detected!");
BT.println("ALARM! Wykryto ruch!");
pirState = HIGH;
}
} else {
digitalWrite(ledPin, LOW); // LED OFF
noTone(buzzerPin); // Wyłączenie buzzera
if (pirState == HIGH) {
// Zmiana stanu PIR
displayMessage("Spokojnie", "Brak ruchu");
Serial.println("Motion ended!");
BT.println("Brak ruchu. System w spoczynku.");
pirState = LOW;
}
}
}
// Funkcja wyświetlania na OLED
void displayMessage(String line1, String line2) {
display.clearDisplay();
display.setCursor(0, 0);
display.println(line1);
display.println(line2);
display.display();
}