如何在Arduino上读取输出引脚实际值?

如何在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拉高以激活你的信号,因为它可能会更可靠。

+0

感谢您的回答!我跳过所有答案中的一个......(我想知道为什么它只有+2 ...)注意:我在输入引脚上附加了1K电阻,以限制电流。看看会发生什么! – Caumons 2014-09-26 15:38:03

你有没有检查过你的Arduino是否因任何其他原因而不能重新启动,这是你看到的奇怪行为? 您可以通过串口打印millis()并查看Arduino运行了多久。

+0

我已经这么做了,谢谢! :) – Caumons 2014-09-29 11:05:53