主要解决以下两种设置冲突。

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)

更多推荐