#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
// Definición de los pines para los LEDs
#define LED1 25
#define LED2 26
#define LED3 27
#define LED4 14
#define LED5 12
#define BOTON 23
int conteoleds = -1; // conteo de leds
int botonincio = 1; // boton no presionado
void app_main() {
// Configuración de los LEDs como salida
gpio_set_direction(LED1, GPIO_MODE_OUTPUT);
gpio_set_level(LED1, 0);
gpio_set_direction(LED2, GPIO_MODE_OUTPUT);
gpio_set_level(LED2, 0);
gpio_set_direction(LED3, GPIO_MODE_OUTPUT);
gpio_set_level(LED3, 0);
gpio_set_direction(LED4, GPIO_MODE_OUTPUT);
gpio_set_level(LED4, 0);
gpio_set_direction(LED5, GPIO_MODE_OUTPUT);
gpio_set_level(LED5, 0);
// designamos al boton como entrada
gpio_set_direction(BOTON, GPIO_MODE_INPUT);
gpio_pullup_en(BOTON);
while (1) {
int botonestado = gpio_get_level(BOTON);
if (botonestado == 0 && botonincio == 1) {
// Apagar el LED actual solo si hay uno encendido
if (conteoleds >= 0) {
switch (conteoleds) {
case 0: gpio_set_level(LED1, 0); break;
case 1: gpio_set_level(LED2, 0); break;
case 2: gpio_set_level(LED3, 0); break;
case 3: gpio_set_level(LED4, 0); break;
case 4: gpio_set_level(LED5, 0); break;
}
}
// Avanzar al siguiente LED
conteoleds = (conteoleds + 1) % 5;
// Encender el siguiente LED
switch (conteoleds) {
case 0: gpio_set_level(LED1, 1); break;
case 1: gpio_set_level(LED2, 1); break;
case 2: gpio_set_level(LED3, 1); break;
case 3: gpio_set_level(LED4, 1); break;
case 4: gpio_set_level(LED5, 1); break;
}
}
// Actualizar el estado del botón
botonincio = botonestado;
// Retardo para evitar una lectura excesiva del estado del botón
vTaskDelay(100 / portTICK_PERIOD_MS);;
}
}