我想用STM32L微控制器计算机械水表的脉冲数。水表的输出来自两个REED开关。
开关的操作解释如下:
如何读入两个输入并能够计算C中的脉冲数?注意:1脉冲= 100升。
答案 0 :(得分:0)
我不确定你真正在问什么,因为无论你是民意调查还是使用边缘触发的中断,你似乎都会这么简单。主要问题是去除开关信号。对于去抖动,您应该确定您的仪表的最大流量,您不需要直接关注,但它可以让您计算最大开关周期。使用最小开启或关闭时间的一些重要部分来执行去抖动。
答案 1 :(得分:0)
将两个开关分开180度,使得一次只能制作一个开关,就是不需要开关去抖动。
实际上,代码需要更复杂,但基本算法可以用这个来表示:
while(1) {
while(switchA() == 0); // wait for switch A to be made
litres += 100; // clock up unit volume
display(litres); // tell the user
while(switchB() == 0); // wait for switch B to be made
}
当磁簧靠近磁铁时,来自簧片开关的脉冲数无关紧要 - 除了第一个脉冲之外的所有脉冲都会被忽略,因为算法会查看另一个开关。