首页 > 解决方案 > Arduino - 模拟读取返回 MAX 值

问题描述

介绍

大家好。我正在尝试开始我的第一次微控制器体验。我喜欢音乐,所以我从 arduino 的SparkFun Spectrum Shield开始。

硬件

软件

我用这段代码刷新了我的arduino https://github.com/sparkfun/Spectrum_Shield/blob/master/Firmware/SparkFun_Spectrum_Demo/SparkFun_Spectrum_Demo.ino 我只添加了一个函数来调试 Frequencies_One 和 Frequencies_Two 值:

void Debug_Frequencies(){
  Serial.print("{\"Left\":[");
  for(int i= 0; i<7; i++)
  {
    Serial.print(Frequencies_One[i]); 
    if(i<6){
      Serial.print(",");
    }
  }
  Serial.print("],\"Right\":[");
  for(int i= 0; i<7; i++)
  {
    Serial.print(Frequencies_Two[i]); 
    if(i<6){
      Serial.print(",");
    }
  }
  Serial.print("]");

  Serial.print(",\"millSecSinceOn\":");
  Serial.print(millis());
  
  Serial.println("}");
}

错误

我在 Arduino IDE 串行监视器中得到以下输出:

15:50:06.080 -> {"Left":[1023,1023,1023,1023,1023,1020,60],"Right":[1023,1023,1023,1023,1023,1023,70],"millSecSinceOn":6599}
15:50:06.536 -> {"Left":[1023,1023,1022,1023,1023,1022,63],"Right":[1023,1023,1023,1022,1023,1023,71],"millSecSinceOn":7025}
15:50:06.949 -> {"Left":[1023,1023,1022,1023,1023,1020,62],"Right":[1023,1023,1023,1023,1023,1023,77],"millSecSinceOn":7451}
15:50:07.370 -> {"Left":[1023,1021,1021,1023,1023,1023,66],"Right":[1023,1023,1023,1023,1023,1023,76],"millSecSinceOn":7877}

制造商代码使用的arduino函数analogRead可以将0-1023作为int值返回。所以analogRead 方法现在每次都返回MAX 值,即使没有音乐输入。

我的分析

我的第一个想法是,在 5V 输入和模拟读取引脚之间的任何地方都必须有一个旁路,但我无法检测到任何(用万用表检查)。在我的板上有一个 2.53k-2.59k 欧姆电阻,当板离线时,arduino 板针 5V 和 A0(和 A1)之间。A0/A1 和地之间还有一个 4.36k 欧姆电阻。

标签: arduino

解决方案


模拟引脚从空气中的静电荷随机读取,为了克服这个问题,我们应该在模拟引脚和地之间使用下拉电阻,

建议使用“10k 欧姆电阻”


推荐阅读