#include <stdint.h>
typedef enum estados {A, B, C, D} estados;
estados estadoActual = A;
estados estadoFuturo = A;
const uint8_t botonTA = 10;
const uint8_t LedRojo = 5;
const long interval = 2000; // interval at which to blink (milliseconds)
unsigned long previousMillis = 0;
void setup() {
// put your setup code here, to run once:
pinMode(botonTA, INPUT_PULLUP);
pinMode(LED_BUILTIN, OUTPUT);
pinMode(LedRojo, OUTPUT);
}
void loop() {
// lectura de las entradas
bool estadoTA = digitalRead(botonTA);
// transiciones de estado
switch (estadoActual){
case A:
if(estadoTA == HIGH)
estadoFuturo = B;
else
estadoFuturo = A;
break;
case B:
if (estadoTA == LOW)
estadoFuturo = A;
else
estadoFuturo = C;
break;
case C:
if(estadoTA == HIGH)
estadoFuturo = C;
else
estadoFuturo = D;
break;
case D:
if(estadoTA == LOW)
estadoFuturo = A;
else
estadoFuturo = C;
break;
}
// Salidas
switch (estadoActual){
case A: // verde rojo
digitalWrite(LedRojo, LOW);
break;
case B: // amarillo rojo
digitalWrite(LedRojo, LOW);
break;
case C: //rojo verde
digitalWrite(LedRojo, HIGH);
break;
case D: // rojo amarillo
digitalWrite(LedRojo, HIGH);
break;
}
// actualización de estado
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
estadoActual = estadoFuturo;
previousMillis = currentMillis;
}
delay(1);
}