Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在没有打印传感器读数的情况下读取传感器读数时,回路不立即工作?_Python_Arduino_Firmata - Fatal编程技术网

Python 在没有打印传感器读数的情况下读取传感器读数时,回路不立即工作?

Python 在没有打印传感器读数的情况下读取传感器读数时,回路不立即工作?,python,arduino,firmata,Python,Arduino,Firmata,我试图连续读取多个反射式红外传感器,直到每个传感器都被阻挡。我使用的是Arduino运行的标准Firmata和Pythons Pyfirmata库 每次我尝试标准读取而不在while循环中打印结果时,我都会得到15到30秒的延迟(我不知道为什么): 示例1-工作但有随机的无法解释的延迟: 示例2-工作正常,但我现在有一系列传感器读取输出: 由于某些原因,当我添加打印(Sensor1.read())时,当传感器被阻止时,我会立即得到响应。但是,如果我删除这部分代码以消除垃圾输出,那么在传感器被阻塞

我试图连续读取多个反射式红外传感器,直到每个传感器都被阻挡。我使用的是Arduino运行的标准Firmata和Pythons Pyfirmata库

每次我尝试标准读取而不在while循环中打印结果时,我都会得到15到30秒的延迟(我不知道为什么):

示例1-工作但有随机的无法解释的延迟: 示例2-工作正常,但我现在有一系列传感器读取输出: 由于某些原因,当我添加打印(Sensor1.read())时,当传感器被阻止时,我会立即得到响应。但是,如果我删除这部分代码以消除垃圾输出,那么在传感器被阻塞和被代码识别并继续移动之间,我会得到一个无法解释的时间延迟。我想做的是不断地读取传感器,而不打印该读数,并在传感器被阻断并产生0.0v电压时立即响应中断while回路。我相信我也可以选择抑制这些while循环的打印输出,但我想知道是否有其他选择?非常感谢您审阅此问题,非常感谢您的帮助

read()可能并不总是精确的
0
。可以使用阈值,例如:

while Sensor1.read() > 10:
另一种解决方案是使用中断和设置标志,这样您就不必进行轮询(并且可以使设备进入睡眠状态)。

读取()可能并不总是精确的
0
。可以使用阈值,例如:

while Sensor1.read() > 10:

另一种解决方案是使用中断和设置标志,这样您就不必进行轮询(并且可以使设备进入睡眠状态)。

为什么要用模拟输入读取光屏障(开关)?您确定该值始终为0.0000吗?我在尝试通过数字输入运行时遇到对象类型错误。但是,我认为我用模拟方法克服了这个问题,也许值得回顾一下数字输入法。。。。测试后,我将更新更多信息:)。。。。感谢您的帮助为什么您要阅读带有模拟输入的光屏障(开关)?您确定该值始终为0.0000吗?我在尝试通过数字输入运行时遇到对象类型错误。但是,我认为我用模拟方法克服了这个问题,也许值得回顾一下数字输入法。。。。测试后,我将更新更多信息:)。。。。谢谢你的帮助谢谢!因此,传感器将返回一个0.60〜0.80的值,而未被阻止,但一旦传感器被阻止,它将返回一个0.00的真零,传感器仅被阻止一瞬间,目标是激活下一个传感器,并使其几乎立即跳闸。同样,代码在打印时工作得很好,但在没有打印时会延迟。我真的不明白为什么阈值很重要,因为真正的0.00在打印读数时效果很好。但不幸的是,当我不打印时,我无法看到正在发生的事情(因为它没有打印)。。。在循环中使用if语句,这可能会有帮助。。。我会更新,一旦我有进一步的信息:)谢谢你的帮助help@user12260192使用print()时,需要执行额外的read()。对于测试,请尝试不带print()的额外读取()和不带额外读取()的print()(即保存上次读取的值并打印),以查看发生了什么。谢谢!因此,传感器将返回一个0.60〜0.80的值,而未被阻止,但一旦传感器被阻止,它将返回一个0.00的真零,传感器仅被阻止一瞬间,目标是激活下一个传感器,并使其几乎立即跳闸。同样,代码在打印时工作得很好,但在没有打印时会延迟。我真的不明白为什么阈值很重要,因为真正的0.00在打印读数时效果很好。但不幸的是,当我不打印时,我无法看到正在发生的事情(因为它没有打印)。。。在循环中使用if语句,这可能会有帮助。。。我会更新,一旦我有进一步的信息:)谢谢你的帮助help@user12260192使用print()时,需要执行额外的read()。对于测试,请尝试不带print()的额外读取()和不带额外读取()的print()(即保存上次读取的值并打印该值),以查看发生了什么。
while Sensor1.read() > 10: