#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/adc.h"
#include "esp_log.h"
#include "stdio.h"
#define ADC_PIN ADC1_CHANNEL_6 // Pino ADC (GPIO34, ADC1_CHANNEL_0)
#define ADC_WIDTH ADC_WIDTH_BIT_12 // Resolução do ADC (12 bits)
#define ADC_ATTEN ADC_ATTEN_DB_0 // Atenuação de 0dB para faixa de 0 a 3.3V
#define NUM_SAMPLES 100 // Número de amostras a serem coletadas
static const char *TAG = "ADC Linearity Test";
void app_main() {
ESP_LOGI(TAG, "Iniciando teste de linearidade do ADC...");
// Configuração do ADC (GPIO34 para ADC1_CHANNEL_0)
adc1_config_width(ADC_WIDTH); // Configura a largura do ADC (12 bits)
adc1_config_channel_atten(ADC_PIN, ADC_ATTEN); // Configura a atenuação do ADC
int adc_value;
float voltage;
// Cabeçalho da impressão para os dados
printf("Valor ADC, Tensão (V)\n");
// Coleta de dados e cálculo de linearidade
for (int i = 0; i < NUM_SAMPLES; i++) {
// Lê o valor do ADC
adc_value = adc1_get_raw(ADC_PIN);
// Converte o valor do ADC para tensão (0 a 3.3V)
voltage = (float)adc_value * (3.3 / 4095.0);
// Imprime os resultados (valor ADC e a tensão correspondente)
printf("%d, %.3f\n", adc_value, voltage);
vTaskDelay(pdMS_TO_TICKS(1000)); // Intervalo de 100ms entre as amostras
}
}