python - 在从传感器读取数据而不打印从传感器读取的数据时,While 循环无法立即工作?

标签 python arduino firmata

我正在尝试连续读取多个反射式红外传感器,直到每个传感器都被阻挡。我正在使用运行标准 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/

相关文章:

c++ - C++ 函数调用中的字符串引用未更新

python - 错误:函数 Input_stream::Input_stream(const string&, bool) 第 63 行。打开文件 @HWI-M02942_file1.fasta 时出错

javascript - 获取类型错误 : "path" is not defined: undefined while executing serial port program for windows using JavaScript

C++ 程序使终端崩溃——如何调试?

python - arduino 读入 pyfirmata 给出的输出为 none

javascript - 使用 Firmata.js 时 Tinkerkit 的 braccio 电源出现故障

node.js - 将外部 C++ 库与 Johnny Five 一起用于基于 Arduino 的项目

Python CSV 模块与 JSON 的问题

python 工具 Visual Studio - 步入不工作

python - 跨多个地理围栏的地理围栏半径分布/比率