主要解决以下两种设置冲突。
GPIO.setmode(GPIO.BCM)
GPIO.setmode(GPIO.BOARD)
只要把命名规则统一起来就好了。都换成BCM或者BOARD,但是要记得把接口的数值换了,因为BCM跟BOARD是不一样的。
例如GPIO.setmode(GPIO.BCM)
定义函数实现左右两个超声波感知距离。
# -*- coding:UTF-8 -*-
import RPi.GPIO as GPIO
import time
def get_distance_lr():
GPIO.setmode(GPIO.BCM)
trig0=22 #发射IO口接在25号
echo0=24 #接收IO口接在24号
GPIO.setup(trig0,GPIO.OUT,initial=GPIO.LOW)
GPIO.setup(echo0,GPIO.IN)
trig1=7 #发射IO口接在25号
echo1=8 #接收IO口接在24号
GPIO.setup(trig1,GPIO.OUT,initial=GPIO.LOW)
GPIO.setup(echo1,GPIO.IN)
while True:
#send
GPIO.output(trig0,True)
GPIO.output(trig1,True)
time.sleep(0.00011) #发送1us的信号
GPIO.output(trig0,False)
GPIO.output(trig1,False)
#start recording
while GPIO.input(echo0)==0:
pass
start0=time.time()
#start recording
while GPIO.input(echo1)==0:
pass
start1=time.time()
#end recording
while GPIO.input(echo0)==1:
pass
end0=time.time()
#end recording
while GPIO.input(echo1)==1:
pass
end1=time.time()
#compute distance 根据时间,计算出光的传播速度/2即为距离
distance_l=round((end0-start0)*343/2*100,2)
distance_r=round((end1-start1)*343/2*100,2)
#print("distance_l:{0}cm".format(distance_l))
#time.sleep(0.1)
#print("distance_r:{0}cm".format(distance_r))
#print("-----------------------------------")
#time.sleep(2)
return distance_l, distance_r
GPIO.setmode(GPIO.BOARD)
# -*- coding:UTF-8 -*-
import RPi.GPIO as GPIO
import time
def get_distance_lr():
GPIO.setmode(GPIO.BOARD)
trig0=15 #发射IO口接在22号
echo0=18 #接收IO口接在24号
GPIO.setup(trig0,GPIO.OUT,initial=GPIO.LOW)
GPIO.setup(echo0,GPIO.IN)
trig1=26 #发射IO口接在7号
echo1=24 #接收IO口接在8号
GPIO.setup(trig1,GPIO.OUT,initial=GPIO.LOW)
GPIO.setup(echo1,GPIO.IN)
while True:
#send
GPIO.output(trig0,True)
GPIO.output(trig1,True)
time.sleep(0.00011) #发送1us的信号
GPIO.output(trig0,False)
GPIO.output(trig1,False)
#start recording
while GPIO.input(echo0)==0:
pass
start0=time.time()
#start recording
while GPIO.input(echo1)==0:
pass
start1=time.time()
#end recording
while GPIO.input(echo0)==1:
pass
end0=time.time()
#end recording
while GPIO.input(echo1)==1:
pass
end1=time.time()
#compute distance 根据时间,计算出光的传播速度/2即为距离
distance_l=round((end0-start0)*343/2*100,2)
distance_r=round((end1-start1)*343/2*100,2)
if distance_l > 5000:
distance_l = 5000
if distance_r > 5000:
distance_r = 5000
# print("distance_q:{0}cm".format(distance_q/10))
# time.sleep(0.1)
#print("distance_l:{0}cm".format(distance_l))
#time.sleep(0.1)
#print("distance_r:{0}cm".format(distance_r))
#print("-----------------------------------")
#time.sleep(2)
return distance_l, distance_r
调用他的代码,输出得到的传感器检测距离。
注:以下代码有我的部分其他工程,此处仅仅是举个例子。
# -*- coding:UTF-8 -*-
import HiwonderSDK.Sonar
import RPi.GPIO as GPIO
import time
from sonar_get_distance_2board import get_distance_lr
#from sonar_get_distance_2 import get_distance_lr
sonar = HiwonderSDK.Sonar.Sonar()
while True:
dis_mm = sonar.getDistance()
distance_l, distance_r = get_distance_lr()
print("distance_q:{0}cm".format(dis_mm/10.0))
print("distance_l:{0}cm".format(distance_l))
print("distance_r:{0}cm".format(distance_r))
print("---------------")
time.sleep(1)