我正在做一个避免机器人作为学校项目的障碍。我试图在下面运行这个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()
答案 0 :(得分:0)
你有两个关闭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
...