如何在Arduino上读取输出引脚实际值?
我们设置了一个控制继电器板的Arduino uno。设置为低电平时继电器激励,接收高电平信号时不执行任何操作。这些继电器用于打开/关闭门,我们正面临一个大问题,因为门“每个人可能每天打开一次”,或者两三天内打开1次(随机)......如何在Arduino上读取输出引脚实际值?
我们已经看到,我们的系统不会发送(AT)命令来打开门,我们怀疑Arduino HIGH输出电压可能会下降几毫秒,然后继电器板将此检测为信号,继电器很兴奋......
所以,现在的软件问题...
我怎么能读真正的引脚输出,且检查是否有在那里,而这些输出引脚设置为电压变低的任何时刻高?要做到这一点,我对SO阅读其他questions,我已经做了以下内容:
const int PIN_GARAGE = 3;
void setup() {
Serial.begin(9600);
pinMode(PIN_GARAGE, OUTPUT);
digitalWrite(PIN_GARAGE, HIGH);
}
void loop() {
// Ommited code that processes commands sent to the Arduino
if (!digitalRead(PIN_GARAGE)) {
Serial.print(millis());
Serial.print(" LOW VOLTAGE ON PIN ");
Serial.println(PIN_GARAGE);
}
}
我不知道,如果上OUTPUT
引脚设置为HIGH做digitalRead()
将始终返回1
代替当前的实际价值,这是我所需要的。
https://stackoverflow.com/a/6487713/2041472从问题您链接
你为什么要这么做?如果你这样做是为了验证引脚是否真的很高,这不会向你确认,因为可能是外部电路的高引脚短路,最好的方法是通过另一个引脚产生反馈;配置另一个引脚作为输入,并将输出引脚连接到新的输入引脚,并读取其值。读取内部寄存器将始终返回控制器试图放置在引脚上的信息,而不是实际的引脚值。
如果您有备用引脚,请将其设置为输入引脚,然后将输出引线中的引线接入输入引线,然后读取输入值。
如果可能的话,我也会考虑改变你的电路,所以arduino拉高以激活你的信号,因为它可能会更可靠。
你有没有检查过你的Arduino是否因任何其他原因而不能重新启动,这是你看到的奇怪行为? 您可以通过串口打印millis()并查看Arduino运行了多久。
我已经这么做了,谢谢! :) – Caumons 2014-09-29 11:05:53
感谢您的回答!我跳过所有答案中的一个......(我想知道为什么它只有+2 ...)注意:我在输入引脚上附加了1K电阻,以限制电流。看看会发生什么! – Caumons 2014-09-26 15:38:03