繁体   English   中英

Python 脚本重复读取传感器错误

[英]Python script to repeatedly read a sensor errors

你好 stackoverflow 社区!

我正在编写一个 python 脚本来重复从 PiHat 传感器检索一个值。 我在堆栈溢出时找到了这个答案每秒运行 python function但在完成一个循环后我遇到以下错误: ValueError: sleep length must be non-negative

这是代码

from sense_hat import SenseHat
import time

start_time = time.time()
interval = 1
sense = SenseHat()
# humidity = sense.get_humidity() *move this to loop

for i in range(20):
  humidity = sense.get_humidity()
  sense.clear()
  print(humidity)
  time.sleep(start_time + i*interval - time.time())
  # f()

*编辑上面的代码以在循环中获取传感器值,以防有人想要运行类似的代码。 否则,它只会重复显示相同的值 我将其他所有内容都保持不变以供参考,因此您可以看到我哪里出错了。 还注释掉了 f()。

似乎没有人在我发现它的线程上提到这个问题。 我用 python 运行过数据科学项目,但传统程序不多,所以如果格式不正确,我深表歉意。

基本上,您能否解释一下它为什么这样做以及一些可能的解决方案以使其发挥作用。 如果你能解释为什么,这对我理解python真的很有帮助。我发现这个的示例代码很旧,可能是过时的方法? 我在树莓派 4 b 上运行它,所以它可能执行得不够快?

感谢您的帮助

如评论中所述,在 for 循环的第一次迭代中,“i”为 0。您应该考虑到计算值可能变为负数(因此ValueError: sleep length must be non-negative )。

您可以使用max(0, start_time + i*interval - time.time())或将范围更改为range(1,21)以防止发生这种情况。

至于 Pycharm 和 Raspberry 之间的差异,它可能与两台机器的时钟精度有关(不同的时间产量time.time()

这似乎是由于范围从 0 开始,并且在任何时间 (0.1s-0.2)<0 的情况下,它都将是负数。 所以改变范围,修复可能看起来像这样

from sense_hat import SenseHat
import time

start_time = time.time()
interval = 1
sense = SenseHat()
humidity = sense.get_humidity()

for i in range(1,21):
  sense.clear()
  print(humidity)
  time.sleep(start_time + i*interval - time.time())
  f()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM