思路:
1、提出AI得到初始化+Loop代码
2、将初始化+Loop代码,修改为任务函数
3、为此任务函数,创建一个新任务,并执行。
1、提问AI: ESP32 ADC arduino 编程,使用ADC读取输入两路电压信号,范围0-3.3V
给出代码:

// 定义ADC引脚(使用ADC1通道,避免与Wi-Fi/BT冲突) const int adcPin1 = 34; // ADC1_CH6 (GPIO34) const int adcPin2 = 35; // ADC1_CH7 (GPIO35)void setup() {Serial.begin(115200);analogReadResolution(12); // 设置12位分辨率// 配置衰减范围为ADC_11db(支持0-3.6V) analogSetPinAttenuation(adcPin1, ADC_11db);analogSetPinAttenuation(adcPin2, ADC_11db); }void loop() {// 同步读取两个通道int rawValue1 = analogRead(adcPin1);int rawValue2 = analogRead(adcPin2);// 转换为电压值float voltage1 = (rawValue1 * 3.3) / 4095.0;float voltage2 = (rawValue2 * 3.3) / 4095.0;// 输出结果Serial.print("ADC1_CH6 (GPIO34): ");Serial.print(rawValue1);Serial.print(" (");Serial.print(voltage1, 2);Serial.println("V)");Serial.print("ADC1_CH7 (GPIO35): ");Serial.print(rawValue2);Serial.print(" (");Serial.print(voltage2, 2);Serial.println("V)");delay(500); // 采样间隔 }
2、将初始化+Loop代码,修改为任务函数
继续添加消息队列,实现task3与串口通信任务间通信。
// 定义ADC引脚(使用ADC1通道,避免与Wi-Fi/BT冲突) const int adcPin1 = 34; // ADC1_CH6 (GPIO34) const int adcPin2 = 35; // ADC1_CH7 (GPIO35) void task3(void *pt){//Serial.begin(115200);analogReadResolution(12); // 设置12位分辨率// 配置衰减范围为ADC_11db(支持0-3.6V) analogSetPinAttenuation(adcPin1, ADC_11db);analogSetPinAttenuation(adcPin2, ADC_11db);while(1){// 同步读取两个通道int rawValue1 = analogRead(adcPin1);int rawValue2 = analogRead(adcPin2);// 转换为电压值float voltage1 = (rawValue1 * 3.3) / 4095.0;float voltage2 = (rawValue2 * 3.3) / 4095.0;// 输出结果// Serial.print("ADC1_CH6 (GPIO34): ");// Serial.print(rawValue1);// Serial.print(" (");// Serial.print(voltage1, 2);// Serial.println("V)");// Serial.print("ADC1_CH7 (GPIO35): ");// Serial.print(rawValue2);// Serial.print(" (");// Serial.print(voltage2, 2);// Serial.println("V)"); vTaskDelay(500);//delay(500); } }
3、为此任务函数,创建一个新任务,并执行。
if (xTaskCreate(task3,"ADC",1024,NULL,1,NULL) == pdPASS)Serial.println("Task3 Created.");