我有一个简单的应用程序,可以使用配有簧片开关的传感器来计算水通量。 所以app应该只计算开关关闭的次数。
我的第一个代码是:
Querysets
一瓶20升装满了,柜台就会显示出120升。
然后我按如下方式更改了代码:
Venue
柜台降至40(使用相同的20升瓶装)。
计数应该是20L,但这不是我的问题,因为它是由簧片开关的弹跳引起的(我将解决后者)。 由于该项目将有3个传感器和3个ISRoutine,我想知道为什么将Serial.print()命令放入主循环会导致如此奇怪的结果。
由于 圣保罗
答案 0 :(得分:0)
串行打印语句依赖于ISR期间禁用的中断。所以Serial.print语句不属于ISR。
你的计数下降的原因是现在你的ISR需要更长的时间来执行它并且它掩盖了一些反弹。关于如何使用Arduino去抖动的内容有无数的教程。你一定能找到一个。
两个最简单的方法是在引脚和地之间使用一个电容进行硬件去抖,或者只使用millis或micros来记录中断发生的时间,并忽略在一小段时间内发生的任何中断。