首页 > 解决方案 > 在从传感器读取而不打印从传感器读取的数据时,循环不能立即工作?

问题描述

我正在尝试连续读取多个反射式红外传感器,直到每个传感器都被阻塞。我正在使用运行标准 Firmata 和 Pythons 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 循环的打印输出,但我想知道是否有替代方案?非常感谢您审查这个问题,并感谢一百万的帮助!

标签: pythonarduinofirmata

解决方案


我知道这是一个老话题,但是几天前我遇到了 pyfirmata 的这个问题,今天我简单地通过使用 end= 参数打印一个新行来解决它,它创建了一个新行,但是下面的打印仍然存在在同一条线上。

Sensor1 = board.get_pin('a,0,i')

while Sensor1.read() != 0:
   Sensor1.read()
   print('', end='')

推荐阅读