树莓派论坛

 找回密码
 立即注册

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

aedanan 发表于 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 )