Arduino中断返回不可靠的值

时间:2018-05-29 12:45:28

标签: arduino interrupt sensor

我有一个简单的应用程序,可以使用配有簧片开关的传感器来计算水通量。 所以app应该只计算开关关闭的次数。

我的第一个代码是:

Querysets

一瓶20升装满了,柜台就会显示出120升。

然后我按如下方式更改了代码:

Venue

柜台降至40(使用相同的20升瓶装)。

计数应该是20L,但这不是我的问题,因为它是由簧片开关的弹跳引起的(我将解决后者)。 由于该项目将有3个传感器和3个ISRoutine,我想知道为什么将Serial.print()命令放入主循环会导致如此奇怪的结果。

由于 圣保罗

1 个答案:

答案 0 :(得分:0)

串行打印语句依赖于ISR期间禁用的中断。所以Serial.print语句不属于ISR。

你的计数下降的原因是现在你的ISR需要更长的时间来执行它并且它掩盖了一些反弹。关于如何使用Arduino去抖动的内容有无数的教程。你一定能找到一个。

两个最简单的方法是在引脚和地之间使用一个电容进行硬件去抖,或者只使用millis或micros来记录中断发生的时间,并忽略在一小段时间内发生的任何中断。