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

时间:2014-09-25 13:49:45

标签: arduino arduino-uno

我们设置了一个控制继电器板的Arduino uno。当设置为LOW时,继电器被激励,并且在接收HIGH信号时不执行任何操作。这个继电器用于打开/关闭门,我们面临一个大问题,因为门是由他们自己的"打开的。也许每天1次或者2或3天1次(随机时间)......

我们已经看到我们的系统没有发送(AT)命令来打开门,我们怀疑Arduino HIGH输出电压可能会下降几毫秒,然后继电器板将其检测为信号和继电器很兴奋......

所以,现在是软件问题......

当这些OUTPUT引脚设置为HIGH时,如何读取实际引脚输出并检查是否有电压变为低电平的瞬间?为此,我已阅读其他内容questions关于SO,我已完成以下工作:

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);
  }
}

我不确定在设置为HIGH的digitalRead()引脚上执行OUTPUT是否总是返回1而不是当前的实际值,这是我需要的

2 个答案:

答案 0 :(得分:0)

来自您关联的问题的

https://stackoverflow.com/a/6487713/2041472

  

你为什么要这样做?如果您这样做是为了验证引脚是否真的很高,这将无法确认,因为外部电路的高引脚可能存在短路,最好的方法是通过另一个引脚创建反馈;将另一个引脚配置为输入,并将输出引脚连接到新的输入引脚,并读取其值。读取内部寄存器将始终为您返回控制器试图放在引脚上的内容,而不是实际的引脚值。

如果您有备用引脚,请将其设置为输入引脚,并将输出线中的导线连接到输入线,然后读取输入值。

如果可能的话,我也会考虑改变你的电路,以便arduino拉高以激活你的信号,因为它可能更可靠。

答案 1 :(得分:0)

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