#include <LiquidCrystal_I2C.h>
#define WINDOW 0
#define WATER 1
#define TEMPERATURE 2
#define FIRE 3
//OUTDOOR SENSOR CONNECTIONS
#define FRONTDOOR 4
#define PRESENCE 5
#define GARAGE 6
#define BACKDOOR 7
#define KEY 10
#define RFID 9
bool isIndoorSensor();
bool isOutdoorSensor();
void show(char *);
LiquidCrystal_I2C lcd(0x27, 16, 2);
// variable state contains the current state
enum {STANDBY,INDOORS,OUTDOORS,ALARM} state = STANDBY;
void setup()
{
pinMode(FIRE,INPUT_PULLUP);
pinMode(BACKDOOR,INPUT_PULLUP);
pinMode(WATER,INPUT_PULLUP);
pinMode(WINDOW,INPUT_PULLUP);
pinMode(TEMPERATURE,INPUT_PULLUP);
pinMode(GARAGE,INPUT_PULLUP);
pinMode(PRESENCE,INPUT_PULLUP);
pinMode(FRONTDOOR,INPUT_PULLUP);
pinMode(KEY,INPUT);
pinMode(RFID,INPUT);
lcd.backlight();
lcd.begin(16, 2);
show("STANDBY");
}
void loop()
{
// turn the LED on (HIGH is the voltage level)
switch (state) {
case STANDBY:
if(isActivated())
{
state= INDOORS;
show ("INDOORS");
}
//Implement
break;
case INDOORS:
if(isRFID())
{
state= OUTDOORS;
show("OUTDOORS");
}
//Implement
else if (isIndoorSensor())
{
state = ALARM;
show("ALARM");
}
else if (isActivated())
{
state = STANDBY;
show("STANDBY");
}
break;
case OUTDOORS:
if (isRFID())
{
state = INDOORS;
show("INDOORS");
}
else if (isIndoorSensor() || (isOutdoorSensor())) {
state = ALARM;
show("ALARM");
}
//Implement
case ALARM:
if (isActivated())
{
state= STANDBY;
show("STANDBY");
}
break;
}
}
bool isIndoorSensor() {
//Implement
return !(digitalRead(WINDOW) && digitalRead(WATER)
&& digitalRead(TEMPERATURE) && digitalRead(FIRE));
}
bool isOutdoorSensor() {
//Implement
return !(digitalRead(FRONTDOOR) && digitalRead(BACKDOOR)
&& digitalRead(PRESENCE) && digitalRead(GARAGE));
}
void show(char* msg) {
lcd.setCursor(0,0);
lcd.print(msg);
lcd.print(" ");
}
bool isActivated() {return digitalRead(KEY);}
bool isRFID() {return digitalRead(RFID);}