#include <Keypad.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <EEPROM.h>
// Postavke LCD zaslona
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Postavke za PIR senzor
int motionSensorPin = 10;
bool motionDetected = false;
// Postavke za tipkovnicu
const byte ROW_NUM = 4; // 4 redka
const byte COLUMN_NUM = 4; // 4 stupca
char keys[ROW_NUM][COLUMN_NUM] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte pin_rows[ROW_NUM] = {9, 8, 7, 6}; // Pinovi za redke
byte pin_column[COLUMN_NUM] = {5, 4, 3, 2}; // Pinovi za stupce
Keypad keypad = Keypad(makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM);
// Postavke alarma
int buzzerPin = 12; // Pin na kojem kontroliramo aktivni buzzer
String inputPassword = "";
String correctPassword = "1234"; // Postavljanje ispravne lozinke
bool alarmActive = false; // Status alarma
bool pinEntered = false; // Status da li je PIN uspješno unesen
bool simulationActive = false; // Status simulacije (aktivna ili ne)
unsigned long motionDetectedTime = 0; // Vrijeme kada je detektiran pokret
// Prototip funkcije (deklaracija) koju pozivamo u setup()
void handlePinEntry();
void setup() {
// Inicijalizacija LCD-a
lcd.begin(16, 2);
lcd.print("Sigurnosni sustav");
// Inicijalizacija pina
pinMode(motionSensorPin, INPUT);
pinMode(buzzerPin, OUTPUT); // Postavi pin za buzzer kao izlaz
// Prikazivanje početnih poruka
lcd.setCursor(0, 1);
lcd.print("Spreman za rad");
delay(10000); // Pričekaj 10 sekundi prije nego što pređeš na postavljanje lozinke
lcd.clear();
}
void loop() {
// Ako PIN nije unesen, čekaj da korisnik unese PIN
if (!pinEntered) {
lcd.setCursor(0, 1);
lcd.print("Unesite PIN:");
lcd.print(inputPassword);
handlePinEntry(); // Funkcija za unos PIN-a
} else {
// Kada je PIN pohranjen, postavi simulaciju aktivnu
if (!simulationActive) {
lcd.clear();
lcd.print("Simulacija aktivna");
simulationActive = true; // Simulacija je sada aktivna
delay(1000); // Prikaz poruke 1 sekundu
}
// Nakon uspješnog unosa PIN-a, omogućavamo funkcionalnost
motionDetected = digitalRead(motionSensorPin); // Provjera pokreta
lcd.clear();
lcd.print("Pokret detektiran!");
tone(buzzerPin, 783, 30000); // Uključi buzzer (zvuk traje 30 sekundi)
alarmActive = true; // Alarm je sada aktivan
motionDetectedTime = millis(); // Spremi vrijeme kada je pokret detektiran
// Ako je alarm aktiviran, traži unos PIN-a za gašenje alarma
if (alarmActive) {
lcd.setCursor(0,1);
lcd.print("Unesite PIN:");
// Pozovi funkciju za unos PIN-a
handlePinEntry();
if (inputPassword == correctPassword) { // Provjera PIN-a
// Ako je PIN ispravan
lcd.clear();
lcd.print("Alarm iskljucen!");
noTone(buzzerPin); // Isključi buzzer
alarmActive = false; // Alarm više nije aktivan
inputPassword = ""; // Resetiraj unos PIN-a
pinEntered = false; // Resetiraj status da nije unesen PIN
simulationActive = false; // Resetiraj simulaciju
delay(1000); // Prikaz poruke 1 sekundu
lcd.clear();
}
}
}
}
// Funkcija za unos PIN-a
void handlePinEntry() {
// Čitanje unosa sa tipkovnice za unos PIN-a
char key = keypad.getKey();
if (key) {
if (key == '#') {
// Kada korisnik pritisne #, PIN se pohranjuje i omogućava simulaciju
pinEntered = true; // PIN je uspješno unesen
lcd.clear();
lcd.print("PIN pohranjen");
delay(1000); // Prikaz poruke 1 sekundu
lcd.clear();
lcd.print("Simulacija aktivna");
}else if (key == '*') {
// Ako je pritisnuta tipka *, resetiraj unos PIN-a
inputPassword = "";
lcd.clear();
lcd.print("Unos resetiran");
delay(1000); // Prikaz poruke 1 sekundu
lcd.clear();
lcd.print("Unesite PIN:"); // Ponovno prikazivanje poruke
} else {
// Ako je pritisnuta bilo koja druga tipka, dodaj je u unos PIN-a
inputPassword += key;
lcd.clear(); // Očisti zaslon
lcd.setCursor(0, 1);
lcd.print("PIN: "); // Prikazujemo poruku za unos PIN-a
lcd.print(inputPassword); // Prikazujemo unesene brojke
}
}
}
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
lcd1:GND
lcd1:VCC
lcd1:SDA
lcd1:SCL
pir1:VCC
pir1:OUT
pir1:GND
keypad1:R1
keypad1:R2
keypad1:R3
keypad1:R4
keypad1:C1
keypad1:C2
keypad1:C3
keypad1:C4
bz1:1
bz1:2