Étape 5: logiciels
Voici le python code, que vous aurez besoin afin que ce programme fonctionne. Enregistrez le programme comme rc_car.py lorsque vous avez terminé.importation RPi.GPIO comme io
IO.setMode (e/s. BCM)
import sys, ATS, termios fois
# Ces deux blocs de code configurer les paramètres de PWM
# le DC deux moteurs sur les voitures RC. Il définit les deux GPIO
broches # utilisés pour l’entrée, commence le PWM et définit le
vitesse des moteurs # 0
motor1_in1_pin = 4
motor1_in2_pin = 17
IO.Setup (motor1_in1_pin, io. OUT)
IO.Setup (motor1_in2_pin, io. OUT)
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. OUT)
IO.Setup (motor2_in2_pin, io. OUT)
motor2 = io. PWM(4,100)
motor2.Start(0)
motor2. ChangeDutyCycle(0)
# Définir les broches GPIO qui seront utilisés pour les LEDs sur
voiture # la RC et en affectant false à la sortie
IO.Setup (18, io. OUT)
IO.Output (18, False)
IO.Setup (23, io. OUT)
IO.Output (23, False)
# La méthode getch peut déterminer quelle touche a été enfoncée
# par l’utilisateur sur le clavier en accédant aux fichiers système
# Il retournera ensuite la touche appuyée en tant que variable
def getch() :
FD = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)
Essayez :
TTY.setraw(sys.stdin.Fileno())
ch = sys.stdin.read(1)
Enfin :
termios.tcsetattr (fd, termios. TCSADRAIN, old_settings)
retour de ch
# Cette disposition du code définit les méthodes utilisées pour déterminer
# Si un moteur doit tourner vers l’avant ou vers l’arrière. Le
les différentes directions # sont atteints en définissant un de la
# Broches GPIO true et l’autre à false. Si le statut de
# les deux broches correspondent, le moteur ne s’allume pas.
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)
# Cette méthode fait alterner les voyants marche/arrêt lorsque l’utilisateur
# appuie sur une touche particulière. Il va ensuite changer le statut
# des lumières donc il va savoir s’il faut les allumer ou
# hors tension lorsqu’elle est appelée ensuite.
def toggleLights() :
lightStatus global
if(lightStatus == false) :
IO.Output (18, True)
IO.Output (23, True)
lightStatus = True
autre chose :
IO.Output (18, False)
IO.Output (23, False)
lightStatus = False
# Cette méthode fait alterner le sens de la direction
moteur de #. La méthode détermine si l’utilisateur veut
# pour tourner à gauche ou à droite selon la clé ils Appuyez sur et
# Ensuite, faire les réglages appropriés. Il fonctionne comme une bascule
# parce que le programme ne peut lire plusieurs touches enfoncées à
# le même temps. Les positions possibles des roues sont
# « droit », « centre » et « de gauche ». Il met ensuite à jour la
condition # de la roue pour accéder à la prochaine fois on l’appelle.
def toggleSteering(direction) :
wheelStatus global
Si (sens == « right ») :
Si (wheelStatus == « centre ») :
motor1_forward()
motor1. ChangeDutyCycle(99)
wheelStatus = « right »
Elif (wheelStatus == « gauche ») :
motor1. ChangeDutyCycle(0)
wheelStatus = « centre »
Si (sens == « gauche ») :
Si (wheelStatus == « centre ») :
motor1_reverse()
motor1. ChangeDutyCycle(99)
wheelStatus = « left »
Elif (wheelStatus == « right ») :
motor1. ChangeDutyCycle(0)
wheelStatus = « centre »
# Affectant les broches PWM false afin que les moteurs ne bougera pas
# jusqu'à ce que l’utilisateur appuie sur la première clé
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 pour l’état des lumières et de la direction
lightStatus = False
wheelStatus = « centre »
# Mode de dispose d’une interface
Print ("w/s : accélération")
imprimer (« un/d: de pilotage ")
Print ("l: lights")
Print ("x: sortie")
# Infini boucle qui ne se terminera pas jusqu'à ce que l’utilisateur appuie sur la
touche exit #
While True :
# Méthode de récupération de personnage clavier est appelée et sauvé
# dans variable
char = getch()
# La voiture poussera vers l’avant lorsque vous appuyez sur la touche « w »
Si (char == « w ») :
motor2_forward()
motor2. ChangeDutyCycle(99)
# La voiture va inverser lorsque vous appuyez sur la touche « s »
Si (char == « s ») :
motor2_reverse()
motor2. ChangeDutyCycle(99)
# La touche « a » fait alterner la direction gauche
Si (char == « a ») :
toggleSteering("left")
# La touche « d » fait alterner la direction droite
Si (char == « d ») :
toggleSteering("right")
# La touche « l » fait alterner les voyants marche/arrêt
Si (char == « l ») :
toggleLights()
# La touche « x » va casser la boucle et quitter le programme
Si (char == « x ») :
Print ("programme a pris fin")
rupture
# À la fin de chaque boucle s’arrête le moteur d’accélération
# et attendre sa prochaine commande
motor2. ChangeDutyCycle(0)
# La variable de caractères clavier sera définie sur vide, prêt
# pour sauver la prochaine touche enfoncée
char = ""
# Programme cessera toute activité GPIO avant de se terminer
IO.Cleanup()