感知节点@7@ ESP32+arduino+ 第五个程序FreeRTOS 上 增加一个新任务ADC任务
思路:
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.");