#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Nastavenie pinov
#define TRIG_PIN 5
#define ECHO_PIN 18
#define BUTTON_PIN 15
#define PIR_PIN 4
#define GREEN_LED 2
#define RED_LED 19
#define BUZZER_PIN 13
// Premenné pre detekciu stlačenia tlačidla
bool buttonPressed = false;
bool lastButtonState = HIGH;
void setup() {
lcd.init(); // Inicializácia LCD
lcd.backlight(); // Zapnutie podsvietenia
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP);
pinMode(PIR_PIN, INPUT);
pinMode(GREEN_LED, OUTPUT);
pinMode(RED_LED, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
lcd.setCursor(0, 0);
lcd.print("Schranka OK");
lcd.setCursor(0, 1);
lcd.print("Bez posty");
}
void loop() {
// Meranie vzdialenosti ultrazvukovým senzorom
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
int duration = pulseIn(ECHO_PIN, HIGH);
float distance = duration * 0.034 / 2;
// Čítanie PIR senzora
bool isMotion = digitalRead(PIR_PIN) == HIGH;
// Čítanie tlačidla s detekciou prechodu
bool currentButtonState = digitalRead(BUTTON_PIN); // Aktuálny stav tlačidla
if (lastButtonState == HIGH && currentButtonState == LOW) {
// Ak sa tlačidlo zmenilo z HIGH na LOW
buttonPressed = !buttonPressed; // Prepnúť stav tlačidla
}
lastButtonState = currentButtonState; // Aktualizovať stav tlačidla
// Stavové správanie na základe senzorov
if (distance < 10) { // Ak je vzdialenosť < 10 cm, je v schránke pošta
digitalWrite(GREEN_LED, HIGH);
digitalWrite(RED_LED, LOW);
lcd.setCursor(0, 0);
lcd.print("Nova posta! ");
lcd.setCursor(0, 1);
lcd.print("Skontrolujte! ");
tone(BUZZER_PIN, 1000, 200);
} else if (buttonPressed) { // Ak bolo tlačidlo stlačené
digitalWrite(GREEN_LED, LOW);
digitalWrite(RED_LED, HIGH);
lcd.setCursor(0, 0);
lcd.print("Schranka otvorena");
lcd.setCursor(0, 1);
lcd.print("Stav: kontrola ");
} else if (isMotion) { // Ak je detekovaný pohyb
lcd.setCursor(0, 0);
lcd.print("Neopravneny vstup");
lcd.setCursor(0, 1);
lcd.print("Alarm! ");
digitalWrite(RED_LED, HIGH);
tone(BUZZER_PIN, 2000, 500);
} else { // Žiadna pošta, tlačidlo nestlačené, žiadny pohyb
digitalWrite(GREEN_LED, LOW);
digitalWrite(RED_LED, LOW);
lcd.setCursor(0, 0);
lcd.print("Schranka OK ");
lcd.setCursor(0, 1);
lcd.print("Bez posty ");
}
}