两个传感器的循迹小车程序
时间: 2024-05-13 07:16:48 浏览: 68
以下是两个红外线传感器的循迹小车程序:
```python
import RPi.GPIO as GPIO
import time
# 设置GPIO口模式
GPIO.setmode(GPIO.BOARD)
# 设置左右轮电机引脚
motorL1 = 11
motorL2 = 13
motorR1 = 16
motorR2 = 18
# 设置红外线传感器引脚
irL = 7
irR = 12
# 设置GPIO口为输出模式
GPIO.setup(motorL1, GPIO.OUT)
GPIO.setup(motorL2, GPIO.OUT)
GPIO.setup(motorR1, GPIO.OUT)
GPIO.setup(motorR2, GPIO.OUT)
# 设置GPIO口为输入模式
GPIO.setup(irL, GPIO.IN)
GPIO.setup(irR, GPIO.IN)
# 向前
def forward():
GPIO.output(motorL1, True)
GPIO.output(motorL2, False)
GPIO.output(motorR1, True)
GPIO.output(motorR2, False)
# 向后
def backward():
GPIO.output(motorL1, False)
GPIO.output(motorL2, True)
GPIO.output(motorR1, False)
GPIO.output(motorR2, True)
# 左转
def turn_left():
GPIO.output(motorL1, False)
GPIO.output(motorL2, True)
GPIO.output(motorR1, True)
GPIO.output(motorR2, False)
# 右转
def turn_right():
GPIO.output(motorL1, True)
GPIO.output(motorL2, False)
GPIO.output(motorR1, False)
GPIO.output(motorR2, True)
# 停止
def stop():
GPIO.output(motorL1, False)
GPIO.output(motorL2, False)
GPIO.output(motorR1, False)
GPIO.output(motorR2, False)
try:
while True:
if GPIO.input(irL) == 0 and GPIO.input(irR) == 0: # 两个传感器都检测到黑线
forward()
elif GPIO.input(irL) == 1 and GPIO.input(irR) == 0: # 左传感器检测到白线,右传感器检测到黑线
turn_right()
elif GPIO.input(irL) == 0 and GPIO.input(irR) == 1: # 左传感器检测到黑线,右传感器检测到白线
turn_left()
else: # 两个传感器都检测到白线
backward()
time.sleep(0.01)
except KeyboardInterrupt:
GPIO.cleanup()
```
以上代码是使用GPIO.BOARD模式进行编写,如果使用GPIO.BCM模式需要修改引脚号。
以下是两个巡线传感器的循迹小车程序:
```python
import RPi.GPIO as GPIO
import time
# 设置GPIO口模式
GPIO.setmode(GPIO.BOARD)
# 设置左右轮电机引脚
motorL1 = 11
motorL2 = 13
motorR1 = 16
motorR2 = 18
# 设置巡线传感器引脚
lineL = 7
lineR = 12
# 设置GPIO口为输出模式
GPIO.setup(motorL1, GPIO.OUT)
GPIO.setup(motorL2, GPIO.OUT)
GPIO.setup(motorR1, GPIO.OUT)
GPIO.setup(motorR2, GPIO.OUT)
# 设置GPIO口为输入模式
GPIO.setup(lineL, GPIO.IN)
GPIO.setup(lineR, GPIO.IN)
# 向前
def forward():
GPIO.output(motorL1, True)
GPIO.output(motorL2, False)
GPIO.output(motorR1, True)
GPIO.output(motorR2, False)
# 向后
def backward():
GPIO.output(motorL1, False)
GPIO.output(motorL2, True)
GPIO.output(motorR1, False)
GPIO.output(motorR2, True)
# 左转
def turn_left():
GPIO.output(motorL1, False)
GPIO.output(motorL2, True)
GPIO.output(motorR1, True)
GPIO.output(motorR2, False)
# 右转
def turn_right():
GPIO.output(motorL1, True)
GPIO.output(motorL2, False)
GPIO.output(motorR1, False)
GPIO.output(motorR2, True)
# 停止
def stop():
GPIO.output(motorL1, False)
GPIO.output(motorL2, False)
GPIO.output(motorR1, False)
GPIO.output(motorR2, False)
try:
while True:
if GPIO.input(lineL) == 0 and GPIO.input(lineR) == 0: # 两个传感器都检测到黑线
forward()
elif GPIO.input(lineL) == 1 and GPIO.input(lineR) == 0: # 左传感器检测到白线,右传感器检测到黑线
turn_right()
elif GPIO.input(lineL) == 0 and GPIO.input(lineR) == 1: # 左传感器检测到黑线,右传感器检测到白线
turn_left()
else: # 两个传感器都检测到白线
backward()
time.sleep(0.01)
except KeyboardInterrupt:
GPIO.cleanup()
```
以上代码使用的是巡线传感器,和红外线传感器的差别是在引脚读取上。
阅读全文
相关推荐
















