我正在尝试连续读取多个反射式红外传感器,直到每个传感器都被阻挡。我正在使用运行标准 Firmata 和 Python Pyfirmata 库的 Arduino。
每次我尝试标准读取而不在 while 循环中打印结果时,都会出现 15 到 30 秒的延迟(我不明白为什么):
示例 1 - 可以工作,但会出现随机且无法解释的延迟:
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()
示例2 - 有效,但我现在有一堆传感器读取输出:
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 循环的打印输出,但我想知道是否有其他选择?非常感谢您审阅这个问题,并感谢一百万的帮助!
最佳答案
read()
可能并不总是精确的 0
。也许使用阈值,例如:
while Sensor1.read() > 10:
另一种解决方案是使用中断并设置标志,这样您就不必进行轮询(并且可以使设备进入休眠状态)。
关于python - 在从传感器读取数据而不打印从传感器读取的数据时,While 循环无法立即工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58513818/