#include <string.h>#include <stdio.h>#include "freertos/FreeRTOS.h"#include "freertos/task.h"#include "freertos/semphr.h"#include "esp_log.h"#include "driver/adc.h"#include "driver/gpio.h"
#define TIMES 256
// static void continuous_adc_init(uint16_t adc1_chan_mask, uint16_t adc2_chan_mask, adc_channel_t *channel, uint8_t channel_num)// {// esp_err_t ret = ESP_OK;// assert(ret == ESP_OK);
// adc_digi_init_config_t adc_dma_config = {// .max_store_buf_size = 1024,// .conv_num_each_intr = 256,// .adc1_chan_mask = adc1_chan_mask,// .adc2_chan_mask = adc2_chan_mask,// };// ret = adc_digi_initialize(&adc_dma_config);// assert(ret == ESP_OK);
// adc_digi_pattern_table_t adc_pattern[10] = {0};
// //Do not set the sampling frequency out of the range between `SOC_ADC_SAMPLE_FREQ_THRES_LOW` and `SOC_ADC_SAMPLE_FREQ_THRES_HIGH`// adc_digi_config_t dig_cfg = {// .conv_limit_en = 0,// .conv_limit_num = 250,// .sample_freq_hz = 620,// };
// dig_cfg.adc_pattern_len = channel_num;// for (int i = 0; i < channel_num; i++) {// uint8_t unit = ((channel[i] >> 3) & 0x1);// uint8_t ch = channel[i] & 0x7;// adc_pattern[i].atten = ADC_ATTEN_DB_11;// adc_pattern[i].channel = ch;// adc_pattern[i].unit = unit;// }// dig_cfg.adc_pattern = adc_pattern;// ret = adc_digi_controller_config(&dig_cfg);// assert(ret == ESP_OK);// }
// static bool check_valid_data(const adc_digi_output_data_t *data)// {// const unsigned int unit = data->type2.unit;// if (unit > 2) return false;// if (data->type2.channel >= SOC_ADC_CHANNEL_NUM(unit)) return false;
// return true;// }
// static void continuous_read(void *arg)// {// esp_err_t ret;// uint32_t ret_num = 0;// uint8_t result[TIMES] = {0};// memset(result, 0xcc, TIMES);// float vout;
// // uint16_t adc1_chan_mask = BIT(0) | BIT(1);// uint16_t adc1_chan_mask = BIT(0);// uint16_t adc2_chan_mask = BIT(0);// // adc_channel_t channel[3] = {ADC1_CHANNEL_0, ADC1_CHANNEL_1, (ADC2_CHANNEL_0 | 1 << 3)};// adc_channel_t channel[1] = {ADC1_CHANNEL_0};
// continuous_adc_init(adc1_chan_mask, adc2_chan_mask, channel, sizeof(channel) / sizeof(adc_channel_t));// adc_digi_start();// // int n = 20;// while(1) {// ret = adc_digi_read_bytes(result, TIMES, &ret_num, ADC_MAX_DELAY);// for (int i = 0; i < ret_num; i+=4) {// adc_digi_output_data_t *p = (void*)&result[i];// if (check_valid_data(p)) {// vout = (p->type2.data * 2500.00)/4095.00;// printf("ADC%d_CH%d: %x voltage is %fmv\n", p->type2.unit+1, p->type2.channel, p->type2.data,vout);// } else {// printf("Invalid data [%d_%d_%x]\n", p->type2.unit+1, p->type2.channel, p->type2.data);// }// }// vTaskDelay(1000 / portTICK_PERIOD_MS);// // If you see task WDT in this task, it means the conversion is too fast for the task to handle
// } // adc_digi_stop();// ret = adc_digi_deinitialize();// assert(ret == ESP_OK);// }
static void single_read(void *arg){ // esp_err_t ret; // int adc1_reading[3] = {0xcc}; int adc1_reading[1] = {0xcc}; // int adc2_reading[1] = {0xcc}; uint32_t etc = 2; float vout; // const char TAG_CH[][10] = {"ADC1_CH2", "ADC1_CH3","ADC1_CH4", "ADC2_CH0"}; const char TAG_CH[1][10] = {"ADC1_CH0"}; gpio_set_direction(1, GPIO_MODE_OUTPUT); adc1_config_width(ADC_WIDTH_BIT_DEFAULT); adc1_config_channel_atten(ADC1_CHANNEL_0, ADC_ATTEN_DB_11); // adc1_config_channel_atten(ADC1_CHANNEL_3, ADC_ATTEN_DB_6); // adc1_config_channel_atten(ADC1_CHANNEL_4, ADC_ATTEN_DB_0); // adc2_config_channel_atten(ADC2_CHANNEL_0, ADC_ATTEN_DB_0);
// int n = 20; // while (n--) { while (1) { adc1_reading[0] = adc1_get_raw(ADC1_CHANNEL_0); // adc1_reading[1] = adc1_get_raw(ADC1_CHANNEL_3); // adc1_reading[2] = adc1_get_raw(ADC1_CHANNEL_4); vout = (adc1_reading[0] * 2500.00)/4095.00; ESP_LOGI(TAG_CH[0], "%x vout mv is %f", adc1_reading[0],vout);
// for (int i = 0; i < 3; i++) { // ESP_LOGI(TAG_CH[i], "%x", adc1_reading[i]); // } ret = adc2_get_raw(ADC2_CHANNEL_0, ADC_WIDTH_BIT_12, &adc2_reading[0]); // assert(ret == ESP_OK); // ESP_LOGI(TAG_CH[3], "%x", adc2_reading[0]); vTaskDelay(500 / portTICK_PERIOD_MS); etc++; if(etc%2){ gpio_set_level(1,1); } else gpio_set_level(1,0); if(etc > 60000) etc = 2; }}
void app_main(void){ single_read(NULL); //continuous_read(NULL);}
评论