【问题标题】:Arduino digitalRead() always returns LOWArduino digitalRead() 总是返回 LOW
【发布时间】:2011-11-07 17:38:36
【问题描述】:

我正在使用面包板arduino。在我的中断函数中,我想读取我的一个 GPIO 引脚的值,然后在它为低时增加一个计数器。我正在使用以下方法进行操作。

displayValues[4]++;
hasButtonPushed = true;

if(digitalRead(BUTTON_A) == LOW) {
    displayValues[5]++;
}
if(digitalRead(BUTTON_B) == LOW) {
    displayValues[6]++;
}
if(digitalRead(BUTTON_C) == LOW) {
    displayValues[7]++;
}

但是,即使输入线直接连接到高电平,代码也会返回低电平。我不相信我的 Atmel 损坏了。有什么想法吗?

【问题讨论】:

  • 您是否将按钮声明为输入?
  • 这实际上可能是 EE 堆栈交换的一个问题——我的猜测是,它与你的引脚如何接地比任何事情都更重要。电,就像水一样,遵循阻力最小的路径,如果它可以通过任何其他按钮或任何其他连接而不是 Atmel 到达地面(它将提供 2.5+v 或任何阈值),它会。您需要确保 Atmel 是电阻最小的路径,否则电压不会达到高状态。
  • 我会尝试在那里发帖谢谢,是的,引脚已被声明为输入。我的万用表读数很高,但 atmel 没有。
  • @secretformula 您是否尝试过在一个简单的主循环()示例中而不是在中断处理程序中进行测试?处理程序对时间等做了一些奇怪的事情
  • LOW 为 0。我最终通过在原生 AVR 中重写数字输入来解决问题,一切都解决了。他们的代码库肯定有问题

标签: c embedded arduino


【解决方案1】:

问题是 arduino 库的问题导致数字阅读无法正常工作。较新的 arduino 版本解决了这个问题,但我通过将所有内容重写为本机 AVR 来解决这个问题。

【讨论】:

  • 什么版本的 Arduino 库导致数字阅读无法正常工作?
  • 这是 1 之前的版本,我不确定。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多