#include <stdio.h>
#include <inttypes.h>
#include <string.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "soc/soc_caps.h"
#include "soc/adc_channel.h"
#include "esp_adc/adc_oneshot.h"
// for ADC_WIDTH_BIT_DEFAULT
#include "driver/adc_types_legacy.h"
// convert from gpio to adc1 channel
adc_channel_t gpio2adc(int gpio) {
#if CONFIG_IDF_TARGET_ESP32
if (gpio == 32)
return ADC1_GPIO32_CHANNEL;
if (gpio == 33)
return ADC1_GPIO33_CHANNEL;
if (gpio == 34)
return ADC1_GPIO34_CHANNEL;
if (gpio == 35)
return ADC1_GPIO35_CHANNEL;
if (gpio == 36)
return ADC1_GPIO36_CHANNEL;
if (gpio == 37)
return ADC1_GPIO37_CHANNEL;
if (gpio == 38)
return ADC1_GPIO38_CHANNEL;
if (gpio == 39)
return ADC1_GPIO39_CHANNEL;
#elif CONFIG_IDF_TARGET_ESP32S2 ||
CONFIG_IDF_TARGET_ESP32S3
if (gpio == 1)
return ADC1_GPIO1_CHANNEL;
if (gpio == 2)
return ADC1_GPIO2_CHANNEL;
if (gpio == 3)
return ADC1_GPIO3_CHANNEL;
if (gpio == 4)
return ADC1_GPIO4_CHANNEL;
if (gpio == 5)
return ADC1_GPIO5_CHANNEL;
if (gpio == 6)
return ADC1_GPIO6_CHANNEL;
if (gpio == 7)
return ADC1_GPIO7_CHANNEL;
if (gpio == 8)
return ADC1_GPIO8_CHANNEL;
if (gpio == 9)
return ADC1_GPIO9_CHANNEL;
if (gpio == 10)
return ADC1_GPIO10_CHANNEL;
#elif CONFIG_IDF_TARGET_ESP32C2 ||
CONFIG_IDF_TARGET_ESP32C3
if (gpio == 0)
return ADC1_GPIO0_CHANNEL;
if (gpio == 1)
return ADC1_GPIO1_CHANNEL;
if (gpio == 2)
return ADC1_GPIO2_CHANNEL;
if (gpio == 3)
return ADC1_GPIO3_CHANNEL;
if (gpio == 4)
return ADC1_GPIO4_CHANNEL;
#elif CONFIG_IDF_TARGET_ESP32C6
if (gpio == 0)
return ADC1_GPIO0_CHANNEL;
if (gpio == 1)
return ADC1_GPIO1_CHANNEL;
if (gpio == 2)
return ADC1_GPIO2_CHANNEL;
if (gpio == 3)
return ADC1_GPIO3_CHANNEL;
if (gpio == 4)
return ADC1_GPIO4_CHANNEL;
if (gpio == 5)
return ADC1_GPIO5_CHANNEL;
if (gpio == 6)
return ADC1_GPIO6_CHANNEL;
#endif
return -1;
}
void app_main(void)
{
adc_channel_t
adc1_channel;
int adc1_gpio;
#if CONFIG_IDF_TARGET_ESP32
printf("TARGET_ESP32\n");
adc1_gpio = 32;
adc1_channel =
gpio2adc(adc1_gpio);
#elif CONFIG_IDF_TARGET_ESP32S2
printf("TARGET_ESP32S2\n");
adc1_gpio = 1;
adc1_channel =
gpio2adc(adc1_gpio);
#elif CONFIG_IDF_TARGET_ESP32S3
printf("TARGET_ESP32S3\n");
adc1_gpio = 1;
adc1_channel =
gpio2adc(adc1_gpio);
#elif CONFIG_IDF_TARGET_ESP32C2
printf("TARGET_ESP32C2\n");
adc1_gpio = 0;
adc1_channel =
gpio2adc(adc1_gpio);
#elif CONFIG_IDF_TARGET_ESP32C3
printf("TARGET_ESP32C3\n");
adc1_gpio = 0;
adc1_channel =
gpio2adc(adc1_gpio);
#elif CONFIG_IDF_TARGET_ESP32C6
printf("TARGET_ESP32C6\n");
adc1_gpio = 0;
adc1_channel =
gpio2adc(adc1_gpio);
#endif
#if ADC_CALI_SCHEME_CURVE_FITTING_SUPPORTED
printf("SUPPORT
ADC_CALI_SCHEME_CURVE_FITTING\n");
#else
printf("NOT
SUPPORT ADC_CALI_SCHEME_CURVE_FITTING\n");
#endif
// ADC default
bit width
printf("ADC_WIDTH_BIT_DEFAULT=%d\n",
ADC_WIDTH_BIT_DEFAULT);
printf("ADC_BITWIDTH_DEFAULT=%d\n", ADC_BITWIDTH_DEFAULT);
// ADC Max
channel
printf("SOC_ADC_MAX_CHANNEL_NUM=%d\n",
SOC_ADC_MAX_CHANNEL_NUM);
// for
continuous mode
printf("SOC_ADC_DIGI_MIN_BITWIDTH=%d\n",
SOC_ADC_DIGI_MIN_BITWIDTH);
printf("SOC_ADC_DIGI_MAX_BITWIDTH=%d\n",
SOC_ADC_DIGI_MAX_BITWIDTH);
// for oneshot
mode
printf("SOC_ADC_RTC_MIN_BITWIDTH=%d\n",
SOC_ADC_RTC_MIN_BITWIDTH);
printf("SOC_ADC_RTC_MAX_BITWIDTH=%d\n",
SOC_ADC_RTC_MAX_BITWIDTH);
// ADC1 Init
adc_oneshot_unit_handle_t adc1_handle;
adc_oneshot_unit_init_cfg_t init_config1 = {
.unit_id = ADC_UNIT_1,
};
ESP_ERROR_CHECK(adc_oneshot_new_unit(&init_config1,
&adc1_handle));
// ADC1 config
adc_oneshot_chan_cfg_t config = {
.bitwidth = ADC_BITWIDTH_DEFAULT,
.atten = ADC_ATTEN_DB_0,
};
printf("adc1_gpio=%d adc1_channel=%d\n", adc1_gpio,
adc1_channel);
ESP_ERROR_CHECK(adc_oneshot_config_channel(adc1_handle,
adc1_channel, &config));
//for (int
i=0;i<10;i++) {
while (1) {
int adc_raw;
ESP_ERROR_CHECK(adc_oneshot_read(adc1_handle,
adc1_channel, &adc_raw));
printf("GPIO%02d adc1_channel: %d Raw: %d(0x%04x)\n",
adc1_gpio, adc1_channel, adc_raw, adc_raw);
vTaskDelay(100);
}
} |