#define ButArm_PIN 35
#define ButFun_PIN 32
#define ButStop_PIN 33
#define ButDisarm_PIN 25
#define ButWarn_PIN 16
#define ButSeg_PIN 23
#define LedOn_PIN 19
#define LedArm_PIN 18
#define LedFun_PIN 5
#define LedWarn_PIN 17
#define BUZZER_PIN 4
#define NOTE_C5 523
hw_timer_t * timerPress = NULL;
bool bArm = false;
bool bFun = false;
bool bStop = false;
bool bDisarm = false;
bool bWarn = false;
bool bSeg = false;
void IRAM_ATTR PressedFor()
{
}
void IRAM_ATTR ArmButton()
{
bArm = true;
}
void IRAM_ATTR FunButton()
{
bFun= = true;
}
void IRAM_ATTR StopButton()
{
bStop = true;
}
void IRAM_ATTR DisarmButton()
{
bDisarm = true;
}
void IRAM_ATTR WarningButton()
{
bWarn = true;
}
void IRAM_ATTR SegButton()
{
bSeg = true;
}
void setup() {
Serial.begin(115200);
pinMode(ButArm_PIN, INPUT_PULLUP);
pinMode(ButFun_PIN, INPUT_PULLUP);
pinMode(ButStop_PIN, INPUT_PULLUP);
pinMode(ButDisarm_PIN, INPUT_PULLUP);
pinMode(ButWarn_PIN, INPUT_PULLUP);
pinMode(ButSeg_PIN, INPUT_PULLUP);
pinMode(LedOn_PIN, OUTPUT);
pinMode(LedArm_PIN, OUTPUT);
pinMode(LedFun_PIN, OUTPUT);
pinMode(LedWarn_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
attachInterrupt(digitalPinToInterrupt(ButArm_PIN), ArmButton, RISING);
attachInterrupt(digitalPinToInterrupt(ButFun_PIN), FunButton, RISING);
attachInterrupt(digitalPinToInterrupt(ButStop_PIN), StopButton, RISING);
attachInterrupt(digitalPinToInterrupt(ButDisarm_PIN), DisarmButton, RISING);
attachInterrupt(digitalPinToInterrupt(ButWarn_PIN), WarningButton, RISING);
attachInterrupt(digitalPinToInterrupt(ButSeg_PIN), SegButton, CHANGE);
timerPress = timerBegin(1000000);
timerAttachInterrupt (timerPress, &PressedFor);
timerAlarm(timerPress, 250000, true, 0);
timerStop(timerPress);
state = 0;
}
void loop() {
if(!contSerial)
{
if(state == 0)
{
Serial.println("Pulse el boton de armar (AZUL)");
contSerial = true;
}
if(state == 1)
{
Serial.println("Pulse el boton de armar (VERDE)");
contSerial = true;
}
if(state == 2)
{
Serial.println("Pulse el boton de armar (AMARILLO)");
contSerial = true;
}
if(state == 3)
{
Serial.println("Pulse el boton de armar (GRIS)");
contSerial = true;
}
if(state == 4)
{
Serial.println("Pulse el boton de armar (BLANCO)");
contSerial = true;
}
}
switch(state)
{
case 0:
if(bArm)
{
Serial.println("Armando ");
Serial.println(".");
Serial.println(".");
Serial.println(".");
Serial.println(".");
Serial.println(".");
Serial.println("Armada")
bArm = false;
contSerial = false;
state = 1;
}
if(bFun)
{
bFun = false;
}
if(bStop)
{
bStop = false;
}
if(bDisarm)
{
bDisarm = false;
}
if(bWarn)
{
Serial.println("Se ha producido un fallo");
Serial.println("Activando alarma");
bWarn = false;
contSerial = false;
state = 3;
}
if(bSeg)
{
bSeg = false;
}
break;
case 1:
if(bArm)
{
bArm = false;
}
if(bFun)
{
Serial.println("Activando ");
Serial.println(".");
Serial.println(".");
Serial.println(".");
Serial.println(".");
Serial.println(".");
Serial.println("Activada")
bFun = false;
contSerial = false;
state = 2;
}
if(bStop)
{
bStop = false;
}
if(bDisarm)
{
Serial.println("Desarmando ");
Serial.println(".");
Serial.println(".");
Serial.println(".");
Serial.println(".");
Serial.println(".");
Serial.println("Desarmada")
bDisarm = false;
contSerial = false;
state = 0;
}
if(bWarn)
{
Serial.println("Se ha producido un fallo");
Serial.println("Activando alarma");
bWarn = false;
contSerial = false;
state = 3;
}
if(bSeg)
{
bSeg = false;
}
break;
case 2:
if(bArm)
{
bArm = false;
}
if(bFun)
{
bFun = false;
}
if(bStop)
{
Serial.println("Parando ");
Serial.println(".");
Serial.println(".");
Serial.println(".");
Serial.println(".");
Serial.println(".");
Serial.println("Parada")
bStop = false;
contSerial = false;
state = 1;
}
if(bDisarm)
{
bDisarm = false;
}
if(bWarn)
{
Serial.println("Se ha producido un fallo");
Serial.println("Activando alarma");
bWarn = false;
contSerial = false;
state = 3;
}
if(bSeg)
{
bSeg = false;
}
break;
case 3:
if(bArm)
{
bArm = false;
}
if(bFun)
{
bFun = false;
}
if(bStop)
{
bStop = false;
}
if(bDisarm)
{
bDisarm = false;
}
if(bWarn)
{
bWarn = false;
}
if(bSeg)
{
Serial.println("Desactivando alarma");
Serial.println(".");
Serial.println(".");
Serial.println(".");
Serial.println(".");
Serial.println(".");
Serial.println("Alarma desactivada");
bSeg = false;
contSerial = false;
state = 4
}
break;
case 4:
if(bArm)
{
bArm = false;
}
if(bFun)
{
bFun = false;
}
if(bStop)
{
bStop = false;
}
if(bDisarm)
{
bDisarm = false;
}
if(bWarn)
{
bWarn = false;
}
if(bSeg)
{
Serial.println("Saliendo del estado de alarma");
Serial.println(".");
Serial.println(".");
Serial.println(".");
Serial.println(".");
Serial.println(".");
Serial.println("Alarma desactivada");
bSeg = false;
contSerial = false;
state = 4
}
break;
}
if (!digitalRead(BUTTON_PIN)) {
tone(BUZZER_PIN, NOTE_C5);
} else {
noTone(BUZZER_PIN);
}
delay(10); // this speeds up the simulation
}