【发布时间】:2016-10-27 10:01:49
【问题描述】:
我正在使用 Raspberry Pi Zero 构建 PiCar。我正在使用 L293D 芯片组连接两个直流电机,并且按照本指南进行的所有操作:
目前我已经编写了一个用于驾驶汽车向前、向后、向左和向右的基本脚本。但是有几个问题。如何在不先向前或向后移动的情况下向左或向右驾驶汽车。另外,我怎样才能使汽车只需按一下 wasd 键就可以转向,并可能使用 cntrl 键加速?转向有点像汽车游戏,你按住加速器移动但如果你松开它就会减速,这有多困难?这是我目前拥有的代码,但您每次都需要按回车键。
PiCar.py
import RPi.GPIO as GPIO
from time import sleep
GPIO.setmode(GPIO.BCM)
#left motor
in2 = 10
in1 = 9
en1 = 11
#right motor
in3 = 24
in4 = 23
en2 = 25
#setup motors
GPIO.setup(in2,GPIO.OUT)
GPIO.setup(in1,GPIO.OUT)
GPIO.setup(en1,GPIO.OUT)
GPIO.setup(in3,GPIO.OUT)
GPIO.setup(in4,GPIO.OUT)
GPIO.setup(en2,GPIO.OUT)
def forwards():
GPIO.output(in2,GPIO.HIGH)
GPIO.output(in1,GPIO.LOW)
GPIO.output(en1,GPIO.HIGH)
GPIO.output(in3,GPIO.HIGH)
GPIO.output(in4,GPIO.LOW)
GPIO.output(en2,GPIO.HIGH)
def backwards():
GPIO.output(in2,GPIO.LOW)
GPIO.output(in1,GPIO.HIGH)
GPIO.output(en1,GPIO.HIGH)
GPIO.output(in3,GPIO.LOW)
GPIO.output(in4,GPIO.HIGH)
GPIO.output(en2,GPIO.HIGH)
def left():
GPIO.output(in2, GPIO.LOW)
GPIO.output(in1, GPIO.LOW)
GPIO.output(en1, GPIO.LOW)
def right():
GPIO.output(in3, GPIO.LOW)
GPIO.output(in4, GPIO.LOW)
GPIO.output(en2, GPIO.LOW)
def stop():
GPIO.output(en1,GPIO.LOW)
GPIO.output(en2,GPIO.LOW)
#setup pwm
pwm_right = GPIO.PWM(en2, 100)
pwm_left = GPIO.PWM(en1, 100)
while True:
cmd = raw_input("Command, w = forward / s = backward / x = stop (add a number between 0..9 for speed eg f6):")
if len(cmd) > 0:
direction = cmd[0]
if direction == "w":
forwards()
elif direction == "s":
backwards()
elif direction == "a":
left()
elif direction == "d":
right()
elif direction == "x":
stop()
else:
stop();
speed = int(cmd[1]) * 11
pwm_left.start(speed)
pwm_right.start(speed)
GPIO.cleanup()
【问题讨论】:
标签: python raspberry-pi