arduino 使用 analogRead 讀取不到數據,digitalRead 卻可以正常讀取


項目場景:

最近在使用安信可的 ESP32S P14 引腳(ADC 16)讀取一個電路狀態的時候遇到一個問題,電路狀態不是很穩定,在高電平的時候,會突然出現毫秒級的波動,出現短暫的低電平,造成設備狀態翻轉,但是波動最低電壓也不會到0,於是我想到使用 analogRead() 讀取模擬量,替代 digitalRead() 的數據量。

可是 analogRead() 讀出來的數據卻是 0 ,digitalRead() 和 萬用表都顯示引腳電壓卻是沒有問題。這就非常奇怪了

問題描述:

我先抽象了一個簡單的 digitalRead() 和 analogRead() 讀取模型,發現 P14 引腳(ADC 16)是可以進行模擬量和數據量的讀取的,analogRead() 讀取模擬量甚至可以不初始化為 INPUT 模式也可以讀取,說明,這個引腳確實是 ADC 引腳。

可是這就沒什么代碼和流程,我整個復制到我應用的代碼里面去獲取模擬量,依然讀取不到數據。

void setup() {
   Serial.begin(115200); 
    pinMode(water_pin, OUTPUT);
    pinMode(sign_pin, INPUT);               
    pinMode(monitor_pin,INPUT);
}

void loop() {
  // printf("\n digitalRead == : %d!!!!!\r\n", digitalRead(sign_pin));
  Serial.println();
  printf("\n analogRead == : %d!!!!!\r\n", analogRead(sign_pin));     // 讀取沒問題
  Serial.println();
  delay(100);
}

在這里插入圖片描述

原因分析:

我在引用代碼加打印的時候發現,在初始化引腳的時候確實是可以讀取模擬量的,可是啟動 WiFi 模塊之后就讀取不到了,我懷疑 arduino 在初始化 WiFi 的時候會把部分 ADC 引腳初始為 數字量模式,我測試了一下 P14(ADC16) 和 P27(ADC17) 都有這個問題,但是 SVP(ADC0) 沒問題。這大概是這個初始化流程移植 arduino 上的時候保留了 UNO板子的特性(0-5 為模擬量)

void setup() {
   Serial.begin(115200); 
    pinMode(water_pin, OUTPUT);
    pinMode(sign_pin, INPUT);
    pinMode(monitor_pin,INPUT);
    printf("\n analogRead111 == : %d!!!!!\r\n", analogRead(sign_pin));   // 這時候是可以讀取模擬量的

    // 啟動 WiFi 並且連接網絡
    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED) 
    {
        delay(500);
        Serial.print(".");
    }
    printf("\n analogRead222 == : %d!!!!!\r\n", analogRead(sign_pin));   // 到這兒的時候就不能讀取模擬量了
    // 獲取並打印 IP 地址
    Serial.println("");
    Serial.println("WiFi connected");
    Serial.print("'ip :");
    Serial.print(WiFi.localIP());
    Serial.println("' to connect"); 
}

void loop() {
  printf("\n digitalRead == : %d!!!!!\r\n", digitalRead(sign_pin));
  Serial.println();
  printf("\n analogRead == : %d!!!!!\r\n", analogRead(sign_pin));
  Serial.println();
  delay(100);
}

解決方案:

修改硬件,將P14引腳修改為SVP引腳就行了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM