运行我的机器人的python代码返回了一个语法错误,我不知道错误是什么

2024-09-27 09:31:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为学校做一个避障机器人项目。我试图运行下面的Python代码,但是出现了一个语法错误。机器人应该移动,但它不工作,因此机器人没有移动。我找不到这个错误的原因。你能告诉我代码有什么错误吗

import RPi.GPIO as GPIO  #Import GPIO library
import time              #Import time library
import traceback
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)   #GPIO are set in BCM format
TRIG = 24
ECHO = 27
##led = 22
m11 = 4
m12 = 26
m21 = 22
m22 = 23
GPIO.setup(TRIG,GPIO.OUT)   #Initialize GPIO Pin as outputs
GPIO.setup(ECHO,GPIO.IN)    #Initialize GPIO Pin as input
##GPIO.setup(led,GPIO.OUT)                  
GPIO.setup(m11,GPIO.OUT)
GPIO.setup(m12,GPIO.OUT)
GPIO.setup(m21,GPIO.OUT)
GPIO.setup(m22,GPIO.OUT)
##GPIO.output(led, True)
time.sleep(5)
def stop(): ##Stops the robot
    print("STOP")
    GPIO.output(m11, False)
    GPIO.output(m12, False)
    GPIO.output(m21, False)
    GPIO.output(m22, False)
def forward(): ##The robot moves forward
    GPIO.output(m11, True)
    GPIO.output(m12, False)
    GPIO.output(m21, True)
    GPIO.output(m22, False)
    print("Forward")
def back(): ##The robot moves backwards
    GPIO.output(m11, False)
    GPIO.output(m12, True)
    GPIO.output(m21, False)
    GPIO.output(m22, True)
    print("Back")
def left(): ##The robot turns to the left
    GPIO.output(m11, False)
    GPIO.output(m12, False)
    GPIO.output(m21, True)
    GPIO.output(m22, False)
    print("Left")
def right(): ##The robot turns to the right
    GPIO.output(m11, True)
    GPIO.output(m12, False)
    GPIO.output(m21, False)
    GPIO.output(m22, False)
    print("Right")
stop()
count = 0

try:
    while(True):
        i = 0
        avgDistance = 0
        for i in range(5):
            GPIO.output(TRIG, False)  #Set TRIG as LOW
            time.sleep(0.1)           #Delay
            GPIO.output(TRIG, True)   #Set TRIG as HIGH
            time.sleep(0.00001)       #Delay of 0.00001 seconds
            GPIO.output(TRIG, False)  #Set TRIG as LOW
        while(GPIO.input(ECHO)==False): #Check whether the ECHO is LOW             
            pulse_start = time.time()
        while(GPIO.input(ECHO)==True): #Check whether the ECHO is HIGH
            pulse_end = time.time()
        pulse_duration = pulse_end - pulse_start #time to get back the pulse to sensor
        distance = pulse_duration * 17150        #Multiply pulse duration by 17150 (34300/2) to get distance
        distance = round(distance,2)  #Round to two decimal points
        avgDistance = avgDistance + distance
        avgDistance = avgDistance / 5
        print(avgDistance)
        flag = 0
        if(avgDistance < 15): #Check whether the distance is within 15 cm range
            count = count + 1
            stop()
            time.sleep(1)
            back()
            time.sleep(1.5)
        if((count%3 == 1) & (flag == 0)):
            right()
            flag = 1
        else:
            left()
            flag = 0
            time.sleep(1.5)
            stop()
            time.sleep(1)
        else:
            forward()
            flag = 0
except Exception:
    traceback.print_exc()
finally:
    GPIO.cleanup()

Tags: thefalsetrueoutputgpiotimesetupsleep
1条回答
网友
1楼 · 发布于 2024-09-27 09:31:29

您有两个结束else块,缩进不好,可能您的意思是:

    ...
    if(avgDistance < 15): #Check whether the distance is within 15 cm range
        count = count + 1
        stop()
        time.sleep(1)
        back()
        time.sleep(1.5)
        if((count%3 == 1) & (flag == 0)):
            right()
            flag = 1
        else:
            left()
            flag = 0
            time.sleep(1.5)
            stop()
            time.sleep(1)
    else:
        forward()
        flag = 0
    ...

相关问题 更多 >

    热门问题