我正在尝试连续读取多个反射式红外传感器,直到每个传感器都被阻塞。我使用的是运行Standard Firmata和Pythons Pyfirmata库的Arduino。
每次我尝试标准读取而没有在while循环中打印结果时,我得到了15到30秒的延迟(我不知道为什么):
Example1 -工作,但有随机的无法解释的延迟:
Sensor1 = board.get_pin('a,0,i') #analogue, pin 0, input mode
while Sensor1.read() != 0: #Sensor defaults to 0.6 V but when blocked 0.0v
Sensor1.read()
Example2 -工作,但我现在有一堆传感器读取输出:
Sensor1 = board.get_pin('a,0,i') #analogue, pin 0, input mode
while Sensor1.read() != 0: #Sensor defaults to 0.6 V but when blocked 0.0v
Sensor1.read()
print(Sensor1.read()) # this prints a bunch of read outputs
由于某些原因,当我添加print(Sensor1.read())时,当传感器被阻塞时,我将立即得到响应。但是,如果我删除这部分代码以消除垃圾输出,那么在传感器被阻塞和被代码识别并继续运行之间,我会得到一个无法解释的时间延迟。我想要做的是不断地读取传感器,而不打印读取的内容,一旦传感器被阻塞并产生0.0v电压,就会立即得到中断while循环的响应。我相信我也可以选择抑制这些while循环的打印输出,但我想知道是否有替代方法?非常感谢你审阅这个问题,也非常感谢你的帮助!
发布于 2019-10-23 12:38:39
read()
可能并不总是精确的0
。可以使用阈值,例如:
while Sensor1.read() > 10:
另一种解决方案是使用中断和设置标志,这样您就不必进行轮询(并且可以使设备进入休眠状态)。
https://stackoverflow.com/questions/58513818
复制