#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
#include "esp_log.h"
#define TAG "DEBUG" // Etiqueta para los mensajes de depuración
// Definimos los pines de los botones y de los LEDs
#define BUTTON1_PIN GPIO_NUM_32
#define BUTTON2_PIN GPIO_NUM_33
#define BUTTON3_PIN GPIO_NUM_25
#define BUTTON4_PIN GPIO_NUM_26
#define BUTTON5_PIN GPIO_NUM_27
#define LED1_PIN GPIO_NUM_15
#define LED2_PIN GPIO_NUM_14
#define LED3_PIN GPIO_NUM_13
#define LED4_PIN GPIO_NUM_12
#define LED5_PIN GPIO_NUM_2
void app_main(void)
{
// Configuración de los pines de los botones como entradas
gpio_set_direction(BUTTON1_PIN, GPIO_MODE_INPUT);
gpio_set_pull_mode(BUTTON1_PIN, GPIO_PULLUP_ONLY); // Activar resistencia pull-up interna
gpio_set_direction(BUTTON2_PIN, GPIO_MODE_INPUT);
gpio_set_pull_mode(BUTTON2_PIN, GPIO_PULLUP_ONLY);
gpio_set_direction(BUTTON3_PIN, GPIO_MODE_INPUT);
gpio_set_pull_mode(BUTTON3_PIN, GPIO_PULLUP_ONLY);
gpio_set_direction(BUTTON4_PIN, GPIO_MODE_INPUT);
gpio_set_pull_mode(BUTTON4_PIN, GPIO_PULLUP_ONLY);
gpio_set_direction(BUTTON5_PIN, GPIO_MODE_INPUT);
gpio_set_pull_mode(BUTTON5_PIN, GPIO_PULLUP_ONLY);
// Configuración de los pines de los LEDs como salidas
gpio_set_direction(LED1_PIN, GPIO_MODE_OUTPUT);
gpio_set_direction(LED2_PIN, GPIO_MODE_OUTPUT);
gpio_set_direction(LED3_PIN, GPIO_MODE_OUTPUT);
gpio_set_direction(LED4_PIN, GPIO_MODE_OUTPUT);
gpio_set_direction(LED5_PIN, GPIO_MODE_OUTPUT);
int led_state[5] = {0, 0, 0, 0, 0}; // Estado inicial de los LEDs (apagados)
int last_button_state[5] = {1, 1, 1, 1, 1}; // Estado anterior de los botones (1 = no presionado)
while (true)
{
// Leer el estado actual de cada botón
int button_state[5];
button_state[0] = gpio_get_level(BUTTON1_PIN);
button_state[1] = gpio_get_level(BUTTON2_PIN);
button_state[2] = gpio_get_level(BUTTON3_PIN);
button_state[3] = gpio_get_level(BUTTON4_PIN);
button_state[4] = gpio_get_level(BUTTON5_PIN);
// Detectar el cambio de estado de cada botón (flanco descendente)
for (int i = 0; i < 5; i++)
{
if (button_state[i] == 0 && last_button_state[i] == 1)
{
// Alternar el estado del LED correspondiente
switch(i) {
case 0:
gpio_set_level(LED1_PIN, !led_state[i]);
break;
case 1:
gpio_set_level(LED2_PIN, !led_state[i]);
break;
case 2:
gpio_set_level(LED3_PIN, !led_state[i]);
break;
case 3:
gpio_set_level(LED4_PIN, !led_state[i]);
break;
case 4:
gpio_set_level(LED5_PIN, !led_state[i]);
break;
}
// Actualizar el estado del LED
led_state[i] = !led_state[i];
ESP_LOGI(TAG, "LED %d cambiado a %d", i + 1, led_state[i]);
// Retardo para evitar rebotes
vTaskDelay(pdMS_TO_TICKS(50));
}
// Actualizar el estado anterior del botón
last_button_state[i] = button_state[i];
}
// Pequeño retardo para evitar cargar excesivamente la CPU
vTaskDelay(pdMS_TO_TICKS(50));
}
}