Arduino digital读错了

电器工程 Arduino 浮针
2022-01-04 23:21:33

我已经用 4 根输入线设置了我的 Arduino UNO,它们连接到端口 10、11、12、13,它们连接到我的面包板上,除了电线之外什么都没有。

我的代码就是:

Serial.println(digitalRead(13));
Serial.println(digitalRead(12));
Serial.println(digitalRead(11));
Serial.println(digitalRead(10));

问题是,在我将一个引脚短暂连接到 5V 或 3V3 后,读数会开始变得疯狂,例如:1 0 0 1 0 1 1 1 0 1 0 1 1 0 毫无意义!没有任何电线直接连接到我的 VCC(5V 或 3V3),读数会不断变化,而它应该为零!

我的阿杜诺死了吗?我怎样才能解决这个问题?

2个回答

你所拥有的东西叫做Floating别针。数字输入引脚对变化非常敏感,除非被积极驱动到一种或另一种状态(高或低),否则会从附近的来源(如面包板、人的手指甚至空气)中拾取杂散电容。任何连接到它的电线都会像一个小天线一样,并导致输入状态发生变化。我的意思是任何电线,板上的走线,到面包板的电线,面包板引脚,甚至是 IC 本身的金属引脚。

这在 Arduino 参考页面中被引用:

如果引脚没有连接到任何东西,digitalRead() 可以返回 HIGH 或 LOW(这可以随机更改)。

如果您查看Arduino 数字引脚教程

然而,这也意味着,没有任何连接的输入引脚,或者连接有未连接到其他电路的导线的输入引脚将报告引脚状态的看似随机变化,从环境中拾取电噪声,或电容耦合状态附近的别针。

如果没有输入,将输入引脚引导到已知状态通常很有用。这可以通过在输入端添加一个上拉电阻器(至+5V)或一个下拉电阻器(接地电阻器)来实现,10K 为常用值。Atmega 芯片中还内置了方便的 20K 上拉电阻,可以通过软件进行访问。这些内置上拉电阻可以通过以下方式访问。

pinMode(pin, INPUT);           // set pin to input
digitalWrite(pin, HIGH);       // turn on pullup resistors

这些弱拉电阻强制输入引脚状态进入已知状态,并且很容易被更强的输入电压覆盖,例如直接连接到地或 +5v。

这个是正常的。除非输入连接到某物,否则它将显示 HIGH 或 LOW 或不断变化。Arduino 网站上的digitalRead参考页面对此进行了描述。

输入引脚具有一些小电容,因此短暂连接到 3V3 或 5V 将对电容充电。您可能会发现使用裸手指会产生类似的效果。

您可以通过在引脚和 GND 之间添加一个大值电阻来避免该问题。

问问自己为什么期望零?