【发布时间】:2022-01-06 18:09:36
【问题描述】:
我正在尝试制作一个警报程序,当高于 4.27v 时变为绿色,低于 -2.56v 时变为红色,并且在这些值之间没有光。我已经获得了一个数据集,我应该从中连续读取并相应地发出警报。但是当它处于高值时,数据中有一些噪音,我应该忽略这些噪音,这样警报就不会闪烁。
例如,如果读数变为4.30 > 4.40 > 4.20 > 4.50 > ...,我必须忽略4.20,并且警报必须保持绿色,不要关闭 1 秒钟然后再打开。
这是我尝试过的,但它仍然闪烁:
high_alarm = 4.27
low_alarm = -2.56
Q = 0.009765625
prev1 = 0
prev2 = 0
for i in range(120):
volt_bit = my_daq.next_reading()
volts = volt_bit * Q - 5
prev2 = prev1
prev1 = volts
if volts > high_alarm:
# green light
bstick.set_color(index=6, name="green")
elif volts <= high_alarm and volts >= low_alarm:
if prev2 > prev1 and volts > prev1:
continue
lights_off()
elif volts < low_alarm:
# red light
bstick.set_color(index=3, name="red")
我也有将前一个和下一个数据与当前值进行比较的想法,但这是不可能的,因为我必须实时进行,所以我不应该知道未来的读数,只知道当前和以前的读数.
如果有人想尝试,这里是闪烁的高值的示例数据集:
[991,
978,
962,
965,
959,
964,
945, # flickered here
956,
960,
959,
953]
【问题讨论】:
-
大窗口的滑动平均呢?