Подключение ADC к gpio esp32

Добрый день.
Пробую научится писать скетч через API Reference. Нашел там раздел про АЦП, иду по пунктам но, вылазит одна ошибкам, которую не могу победить и разобраться в ней:

void app_main (void)
{
adc_continuous_handle_t handle = NULL;
adc_continuous_handle_cfg_t allocation = {
 .max_store_buf_size = 1024,
 .conv_frame_size = 256 	
};

тут я пытаюсь настроить структуру конфигураций в принципе нет сложностей, а вот дальше по референсу нужно сконфигурировать АЦП :

`adc_continuous_config_t adc_config = {
  .pattern_num = 1,
  .sample_freq_hz = 20*1000,
  .conv_mode = 	ADC_CONV_SINGLE_UNIT_1,
  .format = ADC_DIGI_OUTPUT_FORMAT_TYPE1,
  .adc_pattern = adc_pattern
};
adc_continuous_config(handle,&adc_config); 

тут есть параметр .adc_pattern, его нужно тоже собрать из нескольких параметров, я его собираю :

adc_digi_pattern_config_t adc_pattern = {
	
.atten = ADC_ATTEN_DB_12,
	
.channel = ADC1_CHANNEL_0,
	
.unit = ADC_UNIT_1,
	
.bit_width = ADC_BITWIDTH_12
};
incompatible types when assigning to type 'adc_digi_pattern_config_t *' from type 'adc_digi_pattern_config_t'
   52 |  adc_config.adc_pattern = adc_pattern;
      |                           ^~~~~~~~~~~

но выдает ошибку,
подскажите пожалуйста как ее победить(

При чем тут вообще ADC?
Вы понимаете, чем отличается переменная от адреса переменной?

Вы имеете ввиду, что нужно не саму переменную передавать (adc_pettern), а ссылаться на нее ти &adc_pettern?

Еще раз перечитайте, что говорит Вам компилятор.

Да если бы я мог разобраться в этой ошибки я бы не писал сюда, спасибо за помощью)

А дальше этой цитаты Вы не стали читать? Ну, потому и разобраться не можете :frowning:

@glazerovaniu
Вы же сами дали ссылку на референс. Посмотрите, там внизу страницы описана структура `adc_continuous_config_t
и типы полей указаны.

Поле adc_config.adc_pattern это не один паттерн, а список. О чем это говорит?

Да я кажется понял, что нужно отправлять адрес, а не переменную, меня смутил пример который есть в референсе для АЦП , я не понимаю как там получилось так

adc_digi_pattern_config_t adc_pattern[SOC_ADC_PATT_LEN_MAX] = {0};
    dig_cfg.pattern_num = channel_num;
    for (int i = 0; i < channel_num; i++) {
        adc_pattern[i].atten = EXAMPLE_ADC_ATTEN;
        adc_pattern[i].channel = channel[i] & 0x7;
        adc_pattern[i].unit = EXAMPLE_ADC_UNIT;
        adc_pattern[i].bit_width = EXAMPLE_ADC_BIT_WIDTH;

        ESP_LOGI(TAG, "adc_pattern[%d].atten is :%"PRIx8, i, adc_pattern[i].atten);
        ESP_LOGI(TAG, "adc_pattern[%d].channel is :%"PRIx8, i, adc_pattern[i].channel);
        ESP_LOGI(TAG, "adc_pattern[%d].unit is :%"PRIx8, i, adc_pattern[i].unit);
    }
    dig_cfg.adc_pattern = adc_pattern;
    ESP_ERROR_CHECK(adc_continuous_config(handle, &dig_cfg));

наверное это как то связано со строчкой

 adc_digi_pattern_config_t adc_pattern[SOC_ADC_PATT_LEN_MAX] = {0};

но я так и не понял ее

Имя массива указывает на его первый элемент.

1 лайк

В примере не один паттерн, а массив патттернов:

а у вас единичный паттерн

1 лайк