// Definición de pines
const int PIN_BOTON = 15;
const int PIN_LED = 16;
// Definición de estados de la máquina
enum Estado {
LED_APAGADO,
LED_ENCENDIDO
};
// Variables globales
Estado estadoActual = LED_APAGADO;
bool estadoBotonAnterior = HIGH; //
void setup() {
// Inicializar comunicación serial
Serial.begin(115200);
// Configurar pines
pinMode(PIN_BOTON, INPUT_PULLUP); // Botón
pinMode(PIN_LED, OUTPUT); // LED como salida
// Estado inicial: LED apagado
digitalWrite(PIN_LED, LOW);
estadoActual = LED_APAGADO;
Serial.println("Sistema iniciado en estado: LED_APAGADO");
}
void loop() {
// Leer estado actual del botón
bool estadoBotonActual = digitalRead(PIN_BOTON);
// Detectar evento (flanco descendente - presión del botón)
bool botonPresionado = (estadoBotonActual == LOW && estadoBotonAnterior == HIGH);
// Máquina de estados
switch (estadoActual) {
case LED_APAGADO:
// Acciones en estado LED_APAGADO
digitalWrite(PIN_LED, LOW);
//Transición si ocurre el evento
if (botonPresionado) {
estadoActual = LED_ENCENDIDO;
Serial.println("Transición a estado: LED_ENCENDIDO");
}
break;
case LED_ENCENDIDO:
// Acciones en estado LED_ENCENDIDO
digitalWrite(PIN_LED, HIGH);
// Transición si ocurre el evento
if (botonPresionado) {
estadoActual = LED_APAGADO;
Serial.println("Transición a estado: LED_APAGADO");
}
break;
}
// Actualizar estado anterior del botón
estadoBotonAnterior = estadoBotonActual;
// Pequeña pausa para estabilidad
delay(10);
}