#include <Wire.h>
#include <stdio.h>
const int LTakt=2,
LAVoda=3,
LAVatra=4,
LVr=5,
Rele=6,
Vrata=14,//zelena
Senz=15,//zuta
ALVatra=16,//plava
ALVoda1=17,//roza
ALVoda2=18,//siva
Piezo=7,
ReleReset=8;
int m=0,i=0,v=0,s=0,al=0;
boolean StanjeVrata=false, StanjePokret=false, StanjeVoda1=false,StanjeVatra=false,alarm=false,
PromjVrata=false, PromjPokret=false, PromjVoda1=false, PromjVatra=false,
StanjeVrataold=false, StanjePokretold=false, StanjeVoda1old=false, StanjeVatraold=false,
VrataOtv=false,AlarmVrata=false,SvjBrojac=false,
StanjeVoda2=false,StanjeVoda2old=false,PromjVoda2=false;
void setup() {
// put your setup code here, to run once:
pinMode(LTakt ,OUTPUT);
pinMode(LAVoda ,OUTPUT);
pinMode(LAVatra ,OUTPUT);
pinMode(LVr ,OUTPUT);
pinMode(Rele ,OUTPUT);
pinMode(Piezo, OUTPUT);
pinMode(Vrata, INPUT_PULLUP);
pinMode(Senz, INPUT_PULLUP);
pinMode(ALVatra, INPUT_PULLUP);
pinMode(ALVoda1, INPUT_PULLUP);
pinMode(ALVoda2, INPUT_PULLUP);
pinMode(ReleReset, OUTPUT);
digitalWrite(ReleReset, LOW);
digitalWrite(Rele,LOW);
//test LED dioda
digitalWrite(LTakt,HIGH);
digitalWrite(LAVoda,HIGH);
digitalWrite(LAVatra,HIGH);
digitalWrite(LVr,HIGH);
digitalWrite(Piezo, HIGH);
delay(900);
digitalWrite(LTakt,LOW);
digitalWrite(LAVoda,LOW);
digitalWrite(LAVatra,LOW);
digitalWrite(LVr,LOW);
digitalWrite(Piezo, LOW);
delay(5);
}
void loop() {
// put your main code here, to run repeatedly:
if (i==30){
if (digitalRead(Vrata)== LOW) StanjeVrata=true;//prekidac zatvoren vrata -vrata otvorena
if (digitalRead(Vrata) == HIGH) StanjeVrata=false;//prekidac otvoren vrata -vrata zatvorena
//provjera da li je bilo promjene
if(StanjeVrata != StanjeVrataold) PromjVrata=true;
//
if (digitalRead(Senz)== LOW) StanjePokret=true;//prekidac senzora pokreta -ima pokret
if (digitalRead(Senz)==HIGH) StanjePokret=false;//prekidac senzora pokreta -nema pokreta
//provjera da li je bilo promjene
if(StanjePokret != StanjePokretold) PromjPokret=true;
//
if (digitalRead(ALVatra)==LOW) StanjeVatra=true; //alarm vatra aktivan
if (digitalRead(ALVatra)==HIGH) StanjeVatra=false; //alarm vatra neaktivan
//provjera da li je bilo promjene
if(StanjeVatra != StanjeVatraold) PromjVatra=true;
//
if (digitalRead(ALVoda1)==LOW) StanjeVoda1=true; //alarm voda aktivan
if (digitalRead(ALVoda1)==HIGH) StanjeVoda1=false;//alarm voda neaktivan
//provjera da li je bilo promjene
if(StanjeVoda1 != StanjeVoda1old) PromjVoda1=true;
//
if (digitalRead(ALVoda2)==LOW) StanjeVoda2=true; //alarm voda aktivan
if (digitalRead(ALVoda2)==HIGH) StanjeVoda2=false;//alarm voda neaktivan
//provjera da li je bilo promjene
if(StanjeVoda2 != StanjeVoda2old) PromjVoda2=true;
i=0;
}
//odlucivanje
if (StanjeVrata && PromjVrata) {//Vrata otvorena=stanje True
digitalWrite(LVr,HIGH);
digitalWrite(Rele,HIGH);
PromjVrata=false;
StanjeVrataold=StanjeVrata;
VrataOtv=true;
digitalWrite(Piezo, HIGH);
delay(500);
digitalWrite(Piezo, LOW);
}
if (!StanjeVrata && PromjVrata){//vrata su zatvorena Stanje=False
digitalWrite(LVr,LOW);
//if (!StanjePokret) digitalWrite(Rele,LOW);
PromjVrata=false;
StanjeVrataold=StanjeVrata;
VrataOtv=false; //ugasi brojac otvorenih vrata
}
if (StanjePokret && PromjPokret){//senzor pokreta aktivan-ukljuci svejtlo
digitalWrite(Rele,HIGH);
PromjPokret=false;
StanjePokretold=StanjePokret;
//SvjBrojac=true;
}
if (!StanjePokret && PromjPokret){//senzor pokreta je neaktivan
//digitalWrite(Rele,LOW);
PromjPokret=false;
StanjePokretold=StanjePokret;
SvjBrojac=true;
}
if (StanjeVatra && PromjVatra){//alarm Vatra aktivan Stanje=true
digitalWrite(LAVatra,HIGH);
alarm=true;
PromjVatra=false;
StanjeVatraold=StanjeVatra;
}
if (!StanjeVatra && PromjVatra){//alarm Vatra neaktivan Stanje=false
digitalWrite(LAVatra,LOW);
alarm=false;
PromjVatra=false;
StanjeVatraold=StanjeVatra;
}
if ((StanjeVoda1 && PromjVoda1) || (StanjeVoda2 && PromjVoda2)){//alarm Voda aktivan Stanje=true
digitalWrite(LAVoda,HIGH);
alarm=true;
if (StanjeVoda1){PromjVoda1=false;
StanjeVoda1old=StanjeVoda1;}
if (StanjeVoda2){PromjVoda2=false;
StanjeVoda2old=StanjeVoda2;}
}
if ((!StanjeVoda1 && PromjVoda1) || (!StanjeVoda2 && PromjVoda2)){//alarm Voda neaktivan Stanje=false
digitalWrite(LAVoda,LOW);
alarm=false;
if (!StanjeVoda1){PromjVoda1=false;
StanjeVoda1old=StanjeVoda1;}
if (!StanjeVoda2){PromjVoda2=false;
StanjeVoda2old=StanjeVoda2;}
}
//brojac otvorenih vrata
if (VrataOtv){
v++;
if (v==600) AlarmVrata=true; //vrata otvorena vec 1 minut-600
}
if (!VrataOtv && v!=0) { //ako su zatvorena vrata i v nije nula postavi na nulu
v=0;
AlarmVrata=false;
digitalWrite(Piezo,LOW);
}
if (SvjBrojac){
s++;
if (s==300) {//30 sec kasnjenje gasenja
digitalWrite(Rele,LOW);
SvjBrojac=false;
}
}
if (!SvjBrojac && s!=0) s=0; //postavi brojac na nulu ako nije
if ((alarm && StanjeVatra) || al!=0 ){
al++;
if (al==300) digitalWrite(ReleReset, HIGH);//600
if (al==330) digitalWrite(ReleReset, LOW);//700
if (al==331) al=0;//701
}
if(m==20){
digitalWrite(LTakt,HIGH);
if (alarm) digitalWrite(Piezo,HIGH);
if (StanjeVrata)digitalWrite(LVr,LOW);
if (StanjeVoda1 || StanjeVoda2)digitalWrite(LAVoda,LOW);
if (StanjeVatra)digitalWrite(LAVatra,LOW);
}
if (m==25){
digitalWrite(LTakt,LOW);
if (alarm) digitalWrite(Piezo,LOW);
if (StanjeVrata)digitalWrite(LVr,HIGH);
if (StanjeVoda1 || StanjeVoda2)digitalWrite(LAVoda,HIGH);
if (StanjeVatra)digitalWrite(LAVatra,HIGH);
}
if (m==26) {
if(AlarmVrata) digitalWrite(Piezo,HIGH);
}
if (m==29) {
if(AlarmVrata) digitalWrite(Piezo,LOW);
}
if(m==30){
digitalWrite(LTakt,HIGH);
if (StanjeVrata)digitalWrite(LVr,LOW);
if (StanjeVoda1 || StanjeVoda2)digitalWrite(LAVoda,LOW);
if (StanjeVatra)digitalWrite(LAVatra,LOW);
}
if (m==35){
digitalWrite(LTakt,LOW);
if (StanjeVrata)digitalWrite(LVr,HIGH);
if (StanjeVoda1 || StanjeVoda2)digitalWrite(LAVoda,HIGH);
if (StanjeVatra)digitalWrite(LAVatra,HIGH);
}
if (m==36) {
if(AlarmVrata) digitalWrite(Piezo,HIGH);
}
if (m==39) {
if(AlarmVrata) digitalWrite(Piezo,LOW);
}
if(m==40){
digitalWrite(LTakt,HIGH);
if (StanjeVrata)digitalWrite(LVr,LOW);
if (StanjeVoda1 || StanjeVoda2)digitalWrite(LAVoda,LOW);
if (StanjeVatra)digitalWrite(LAVatra,LOW);
}
if (m==45){
digitalWrite(LTakt,LOW);
if (StanjeVrata)digitalWrite(LVr,HIGH);
if (StanjeVoda1 || StanjeVoda2)digitalWrite(LAVoda,HIGH);
if (StanjeVatra)digitalWrite(LAVatra,HIGH);
}
if (m==46) {
if(AlarmVrata) digitalWrite(Piezo,HIGH);
}
if (m==49) {
if(AlarmVrata) digitalWrite(Piezo,LOW);
}
if(m==50){
if (!alarm || !AlarmVrata) digitalWrite(Piezo,LOW);
if (!StanjeVrata)digitalWrite(LVr,LOW);
if (!StanjeVoda1 || StanjeVoda2)digitalWrite(LAVoda,LOW);
if (!StanjeVatra)digitalWrite(LAVatra,LOW);
m=0;
}
m++;i++;
delay(100);
}