Paso 5: Software
A continuación es el python código que necesita en orden para este programa de trabajo. Guarde el programa como rc_car.py cuando haya terminado.importación RPi.GPIO como io
IO.setMode (io. BCM)
Import sys, tty, termios, tiempo
# Estos dos bloques de código configuración PWM
# el DC dos motores en el coche de RC. Define los dos GPIO
pernos # utilizados para la entrada, comienza la PWM y establece la
velocidad de los motores # 0
motor1_in1_pin = 4
motor1_in2_pin = 17
IO.Setup (motor1_in1_pin, io. HACIA FUERA)
IO.Setup (motor1_in2_pin, io. HACIA FUERA)
motor1 = io. PWM(4,100)
motor1.Start(0)
motor1. ChangeDutyCycle(0)
motor2_in1_pin = 24
motor2_in2_pin = 25
IO.Setup (motor2_in1_pin, io. HACIA FUERA)
IO.Setup (motor2_in2_pin, io. HACIA FUERA)
motor2 = io. PWM(4,100)
motor2.Start(0)
motor2. ChangeDutyCycle(0)
# Definición de los pines GPIO que serán utilizados para los LEDs en
coche # la RC y la salida en falso
IO.Setup (18, io. HACIA FUERA)
IO.Output (18, falso)
IO.Setup (23, io. HACIA FUERA)
IO.Output (23, False)
# El método de getch puede determinar que tecla ha sido presionada
# por el usuario en el teclado mediante el acceso a los archivos de sistema
# Entonces volverá la tecla presionada como una variable
getch() Def:
FD = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)
tratar de:
TTY.setraw(sys.stdin.fileno())
CH = sys.stdin.read(1)
Finalmente:
termios.tcsetattr (fd, termios. TCSADRAIN, old_settings)
volver a ch
# En esta sección del código define los métodos utilizados para determinar
# Si un motor tiene que girar hacia adelante o hacia atrás. El
diferentes direcciones # se logran mediante el establecimiento de uno de los
# Pines GPIO a true y el otro a false. Si el estado de
# coinciden con los pines, el motor no girará.
DEF motor1_forward():
IO.Output (motor1_in1_pin, True)
IO.Output (motor1_in2_pin, False)
DEF motor1_reverse():
IO.Output (motor1_in1_pin, False)
IO.Output (motor1_in2_pin, True)
DEF motor2_forward():
IO.Output (motor2_in1_pin, True)
IO.Output (motor2_in2_pin, False)
DEF motor2_reverse():
IO.Output (motor2_in1_pin, False)
IO.Output (motor2_in2_pin, True)
# Este método cambiará las luces de encendido/apagado cuando el usuario
# presiona una tecla determinada. Luego cambiará el estado de
# de las luces para que lo sepan si a o
# cuando está próximo llamado.
DEF toggleLights():
lightStatus global
if(lightStatus == false):
IO.Output (18, True)
IO.Output (23, True)
lightStatus = True
otra cosa:
IO.Output (18, falso)
IO.Output (23, False)
lightStatus = False
# Este método cambiará la dirección de la dirección
motor #. El método va a determinar si el usuario desea
# para girar a la izquierda o derecha dependiendo de la tecla que oprime y
# luego realizar el ajuste correspondiente. Funciona como un palanca
# porque el programa no puede leer múltiples llaves prensadas en
# al mismo tiempo. Las posibles posiciones de las ruedas son
# "derecha", "centro" y "la izquierda". Luego se actualizará el
Estado de # de la rueda para acceder a la siguiente vez que se llama.
DEF toggleSteering(direction):
wheelStatus global
Si (dirección == "derecho"):
Si (wheelStatus == "centro"):
motor1_forward()
motor1. ChangeDutyCycle(99)
wheelStatus = "derecho"
Elif (wheelStatus == "izquierda"):
motor1. ChangeDutyCycle(0)
wheelStatus = "centro"
Si (dirección == «izquierda»):
Si (wheelStatus == "centro"):
motor1_reverse()
motor1. ChangeDutyCycle(99)
wheelStatus = "left"
Elif (wheelStatus == "derecho"):
motor1. ChangeDutyCycle(0)
wheelStatus = "centro"
# Establecer los pines PWM en false para que no se muevan los motores
# hasta que el usuario presiona la tecla
IO.Output (motor1_in1_pin, False)
IO.Output (motor1_in2_pin, False)
IO.Output (motor2_in1_pin, False)
IO.Output (motor2_in2_pin, False)
# Globales variables en el estado de las luces y la dirección
lightStatus = False
wheelStatus = "centro"
# Instrucciones para cuando el usuario tiene una interfaz
Imprimir ("w/s: aceleración")
Imprimir ("un/d: dirección")
Imprimir ("l: luces")
Imprimir ("salida de x:")
# Lazo infinito que no terminará hasta que el usuario presiona el
tecla de salida #
Aunque la verdad:
# Método de recuperación teclado carácter es llamado y guardado
# en la variable
char = getch()
# El coche va a conducir hacia adelante cuando se presiona la tecla "w"
Si (char == "w"):
motor2_forward()
motor2. ChangeDutyCycle(99)
# El coche va a retroceder cuando se presiona la tecla "s"
Si (char == "s"):
motor2_reverse()
motor2. ChangeDutyCycle(99)
# La tecla "a" alternará la dirección izquierda
Si (char == "a"):
toggleSteering("left")
# La tecla "d" alternará la dirección derecha
Si (char == "d"):
toggleSteering("right")
# La tecla "l" será cambiar los LEDs de encendido/apagado
Si (char == "l"):
toggleLights()
# La tecla "x" será romper el bucle y salir del programa
Si (char == "x"):
Imprimir ("programa terminado")
rotura
# Al final de cada bucle se detendrá el motor de aceleración
# y esperar a su siguiente comando
motor2. ChangeDutyCycle(0)
# La variable de caracteres de teclado se establecerá en blanco, listo
# guardar la siguiente tecla que se presiona
char = ""
# Programa cesará toda actividad GPIO antes de terminar
IO.Cleanup()