感知节点@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);  // 采样间隔
}
View Code

 

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.");
posted @ 2025-10-16 19:26  辛河  阅读(9)  评论(0)    收藏  举报