#include <TimerOne.h>
#define INIT 0
#define BALIZA_OFF 1
#define LED_ON 2
#define LED_OFF 3
#define PIN_BALIZA 5
#define PIN_PULSADOR 6
int mSegBaliza;
int estadoBaliza = INIT;
int TIEMPO_BALIZA;
void setup() {
Timer1.initialize(1000); //interrumpe cada 1 mSeg
Timer1.attachInterrupt(ISR_Timer);
mSegBaliza = 0;
TIEMPO_BALIZA = 0;
Serial.begin(9600);
}
void loop() {
maquinaEstadoBaliza();
}
void maquinaEstadoBaliza (void)
{
switch (estadoBaliza)
{
case INIT:
digitalWrite(PIN_BALIZA, LOW);
estadoBaliza = BALIZA_OFF;
break;
case BALIZA_OFF:
if (digitalRead(PIN_PULSADOR) == LOW)
{
digitalWrite(PIN_BALIZA, HIGH);
mSegBaliza = 0;
estadoBaliza = LED_ON;
}
break;
case LED_ON:
if (mSegBaliza >= TIEMPO_BALIZA)
{
digitalWrite(PIN_BALIZA, LOW);
mSegBaliza = 0;
estadoBaliza = LED_OFF;
}
if (digitalRead(PIN_PULSADOR) == LOW)
{
digitalWrite(PIN_BALIZA, LOW);
estadoBaliza = BALIZA_OFF;
}
break;
case LED_OFF:
if (mSegBaliza >= 1000)
{
digitalWrite(PIN_BALIZA, LOW);
mSegBaliza = 0;
estadoBaliza = LED_ON;
}
if (digitalRead(PIN_PULSADOR) == LOW)
{
digitalWrite(PIN_BALIZA, LOW);
estadoBaliza = BALIZA_OFF;
}
break;
}
}
void ISR_Timer(void)
{
mSegBaliza++;
}