查看: 2180|回复: 0
收起左侧

[交流] 树莓派+python+多线程+超声波测距仪出现的问题分析及解决

2019-6-14 13:03:12 | 显示全部楼层 |阅读模式
======================================================
一般情况
======================================================
1.一般情况下,超声波测距仪的核心python程序如下:

                GPIO.output(TrigPin, 1)

                time.sleep(0.00001)

                GPIO.output(TrigPin, 0)

                while GPIO.input(EchoPin) == 0:

                    pass

                time1 = time.time()

                while GPIO.input(EchoPin) == 1:

                    pass

                time2 = time.time()

                during = time2 - time1

                distance = (during * 340 / 2 * 100)


核心程序是先计算时间差during,后,通过超声波的传播速度,计算出距离distance。
======================================================
问题
======================================================
以上代码,在主线程中是没有问题的,但当在主线程中启动2个子线程(分别为t1和t2),其中1个子线程(t2)是实时计算超声波测距仪测量的距离,那么连续测量出的距离就会出现较大的偏差(会计算出2000公里的连续数据)。
======================================================
问题分析
======================================================
分析认为,应该是Python多线程的机制造成的(全局解释器锁(GIL))
t2子线程在计算time1 =time.time()后被挂起,过一段时间后,继续t2子线程,则计算了time2 = time.time(),此时,计算时间差during实际是包含了被挂起的时间,因此计算出的距离就会有问题。
======================================================
问题解决
======================================================
放弃线程,采用进程,问题解决!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

热点推荐

关注我们,了解更多

官方微信

服务时间:10:00-16:00

13714503811

公司地址:深圳市龙岗区南湾街道东门头路8号

Copyright © 2012-2020 Powered by 树莓派论坛 2019.4  粤ICP备15075382号-1
快速回复 返回列表 返回顶部