#include <stdio.h>
#include "driver/gpio.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_log.h"
#include "freertos/timers.h"
#include "driver/adc.h"
#define led1 2
#define ledR 33
#define ledG 25
#define ledB 26
uint8_t led_level = 0;
static const char *tag = "Main";
TimerHandle_t xTimers;
int interval = 50;
int timerId = 1;
int adc_val = 0;
esp_err_t init_led(void);
esp_err_t blink_led(void);
esp_err_t set_timer(void);
esp_err_t set_adc(void);
void vTimerCallback(TimerHandle_t pxTimer)
{
blink_led();
adc_val = adc1_get_raw(ADC1_CHANNEL_4); // Leer el valor del ADC
int adc_case = adc_val / 1000; // max = 4095
ESP_LOGI(tag, "ADC VAL: %i", adc_val);
switch (adc_case)
{
case 0:
gpio_set_level(ledR, 0);
gpio_set_level(ledG, 0);
gpio_set_level(ledB, 0);
break; // Asegúrate de agregar break después de cada caso
case 1:
gpio_set_level(ledR, 1);
gpio_set_level(ledG, 0);
gpio_set_level(ledB, 0);
break;
case 2:
gpio_set_level(ledR, 1);
gpio_set_level(ledG, 1);
gpio_set_level(ledB, 0);
break;
case 3:
gpio_set_level(ledR, 1);
gpio_set_level(ledG, 1);
gpio_set_level(ledB, 1);
break;
}
}
void app_main(void)
{
init_led();
set_adc(); // Configurar el ADC
set_timer();
}
esp_err_t init_led(void)
{
gpio_reset_pin(led1);
gpio_set_direction(led1, GPIO_MODE_OUTPUT);
gpio_reset_pin(ledR);
gpio_set_direction(ledR, GPIO_MODE_OUTPUT);
gpio_reset_pin(ledG);
gpio_set_direction(ledG, GPIO_MODE_OUTPUT);
gpio_reset_pin(ledB);
gpio_set_direction(ledB, GPIO_MODE_OUTPUT);
return ESP_OK;
}
esp_err_t blink_led(void)
{
led_level = !led_level;
gpio_set_level(led1, led_level);
return ESP_OK;
}
esp_err_t set_timer(void)
{
ESP_LOGI(tag, "Timer init configuration");
xTimers = xTimerCreate("Timer", pdMS_TO_TICKS(interval), pdTRUE, (void *)timerId, vTimerCallback); // Corregido el nombre de la función
if (xTimers == NULL)
{
ESP_LOGE(tag, "The timer was not created.");
}
else
{
if (xTimerStart(xTimers, 0) != pdPASS)
{
ESP_LOGE(tag, "The timer could not be set into the active state");
}
}
return ESP_OK;
}
esp_err_t set_adc(void)
{
adc1_config_width(ADC_WIDTH_BIT_12); // Configurar el ancho del ADC
adc1_config_channel_atten(ADC1_CHANNEL_4, ADC_ATTEN_DB_11); // Configurar el canal y la atenuación del ADC
return ESP_OK;
}