树莓派论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2452|回复: 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实际是包含了被挂起的时间,因此计算出的距离就会有问题。
======================================================
问题解决
======================================================
放弃线程,采用进程,问题解决!
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|树莓派论坛 ( 粤ICP备15075382号-1  

GMT+8, 2024-11-25 15:21 , Processed in 1.109375 second(s), 23 queries , Gzip On.

Powered by Shumeipai.net! X3.2

© 2001-2015 树莓派论坛安全联盟

快速回复 返回顶部 返回列表