#include <string.h>
#include <stdio.h>
#include "sdkconfig.h"
#include "esp_log.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/semphr.h"
#include "esp_adc/adc_continuous.h"
static const char *TAG = "ADC_TASK";
adc_continuous_handle_t adc_handle = NULL; // variável global
esp_err_t ret;
void initAdc(void);
void adc_task(void *param);
void app_main(void) {
initAdc();
printf("Sa bosta não eru funcionar ");
xTaskCreate(adc_task, "ADC Reader", 4096, NULL, 5, NULL);
}
void initAdc(void) {
adc_continuous_handle_cfg_t adc_config = {
.max_store_buf_size = 1024,
.conv_frame_size = 256,
};
ESP_ERROR_CHECK(adc_continuous_new_handle(&adc_config, &adc_handle));
static adc_digi_pattern_config_t pattern[] = {
{
.atten = ADC_ATTEN_DB_11,
.channel = ADC_CHANNEL_6, // GPIO34
.unit = ADC_UNIT_1,
.bit_width = ADC_BITWIDTH_12,
}
};
adc_continuous_config_t config = {
.sample_freq_hz = 20 * 1000,
.conv_mode = ADC_CONV_SINGLE_UNIT_1, //usando apenas o adc 1
.format = ADC_DIGI_OUTPUT_FORMAT_TYPE1,
.pattern_num = 1, //numero de canais que vai ser usado
};
config.adc_pattern = pattern;
ESP_ERROR_CHECK(adc_continuous_config(adc_handle, &config));
ret = adc_continuous_start(adc_handle);
if (ret == ESP_OK){
ESP_LOGI(TAG, "Tudo certo por aqui :)");
}else
{
ESP_LOGI(TAG, "Deu ruim");
}
}
void adc_task(void *param) {
uint8_t result[256];
adc_digi_output_data_t *output;
while (1) {
uint32_t bytes_read = 0;
esp_err_t ret = adc_continuous_read(adc_handle, result, sizeof(result), &bytes_read, 1000);
if (ret == ESP_OK && bytes_read > 0) {
for (int i = 0; i < bytes_read; i += sizeof(adc_digi_output_data_t)) {
output = (adc_digi_output_data_t *)&result[i];
int val = output->type1.data;
ESP_LOGI(TAG, "ADC Raw: %d", val);
}
} else {
ESP_LOGW(TAG, "Read timeout or error: %s", esp_err_to_name(ret));
}
vTaskDelay(pdMS_TO_TICKS(1000));
}
}