Stap 5: Software
Hieronder is de python code u in om dit programma moet te werken. Sla het programma op als rc_car.py wanneer u klaar bent.importeren van RPi.GPIO als io
io.setmode (io. BCM)
importeren van sys, tty, termios, tijd
# Deze twee blokken van code de PWM instellingen configureren voor
# de twee DC motoren op de RC auto. Het definieert de twee GPIO
# pinnen gebruikt voor de invoer, begint de PWM en sets de
# motors snelheid op 0
motor1_in1_pin = 4
motor1_in2_pin = 17
io.Setup (motor1_in1_pin, io. UIT)
io.Setup (motor1_in2_pin, io. UIT)
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. UIT)
io.Setup (motor2_in2_pin, io. UIT)
Motor2 = io. PWM(4,100)
Motor2.Start(0)
Motor2. ChangeDutyCycle(0)
# Het definiëren van de GPIO pinnen die zal worden gebruikt voor de LEDs op
# de RC auto en instellen van de uitgang op false
io.Setup (18, io. UIT)
io.output (18, False)
io.Setup (23, io. UIT)
io.output (23, False)
# De methode getch kunt bepalen welke toets is ingedrukt
# door de gebruiker op het toetsenbord door de toegang tot de systeembestanden
# Het keert dan de ingedrukte toets als een variabele
def getch():
FD = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)
Try:
tty.setraw(sys.stdin.fileno())
CH = sys.stdin.read(1)
tot slot:
termios.tcsetattr (fd, termios. TCSADRAIN, old_settings)
retourneren van ch
# Deze sectie van code definieert de methoden gebruikt om te bepalen
# of een motor moet draaien vooruit of achteruit. De
# verschillende richtingen worden bereikt door een van de
# GPIO pinnen op true en anderzijds op false. Als de status van
# beide pins overeenkomen, die de motor niet zal veranderen.
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)
# Deze methode schakelt de verlichting uitschakelen wanneer de gebruiker
# op een bepaalde toets drukt. Het zal dan het veranderen van de status
# van de lichten, zodat het zal weten of ze inschakelen of
# af wanneer het volgende wordt aangeroepen.
def toggleLights():
globale lightStatus
if(lightStatus == false):
io.output (18, True)
io.output (23, True)
lightStatus = True
anders:
io.output (18, False)
io.output (23, False)
lightStatus = False
# Deze methode wordt de richting van het stuurwiel in-/ uitschakelen
# motor. De methode zal bepalen of de gebruiker wil
# om te schakelen van links of rechts afhankelijk van de toets zij drukken en
# Maak de juiste aanpassing. Het werkt als een knevel
# omdat het programma niet kan lezen van meerdere ingedrukte toetsen op
# hetzelfde moment. De mogelijke standen van de wielen zijn
# "right", "centrum" en "left". Het worden dan doorgevoerd in de
# de status van het wiel voor toegang tot de volgende keer wordt aangeroepen.
def toggleSteering(direction):
globale wheelStatus
Als (richting == "recht"):
Als (wheelStatus == "centrum"):
motor1_forward()
motor1. ChangeDutyCycle(99)
wheelStatus = "rechts"
Elif (wheelStatus == "links"):
motor1. ChangeDutyCycle(0)
wheelStatus = "centrum"
Als (richting == "links"):
Als (wheelStatus == "centrum"):
motor1_reverse()
motor1. ChangeDutyCycle(99)
wheelStatus = "left"
Elif (wheelStatus == "recht"):
motor1. ChangeDutyCycle(0)
wheelStatus = "centrum"
# Instellen van de PWM-pinnen op false zodat de motoren zal niet bewegen
# totdat de gebruiker op de eerste sleutel
io.output (motor1_in1_pin, False)
io.output (motor1_in2_pin, False)
io.output (motor2_in1_pin, False)
io.output (motor2_in2_pin, False)
# Globale variabelen voor de status van de lichten en stuurinrichting
lightStatus = False
wheelStatus = "centrum"
# Instructies voor wanneer de gebruiker een interface heeft
afdrukken ("w/s: versnelling")
afdrukken ("een/d: besturing")
afdrukken ("l: lights")
afdrukken ("x: exit")
# Oneindige lus die niet eindigen zal totdat de gebruiker op de
# afsluittoets
terwijl juist:
# Methode voor het ophalen van toetsenbord-teken is riep en redde
# in variabele
char = getch()
# De auto zal rijden naar voren wanneer de "w"-toets is ingedrukt
Als (char == "w"):
motor2_forward()
Motor2. ChangeDutyCycle(99)
# De auto zal draaien wanneer de "s"-toets is ingedrukt
Als (char == "s"):
motor2_reverse()
Motor2. ChangeDutyCycle(99)
# De "a"-toets schakelt het stuurwiel links
Als (char == "a"):
toggleSteering("left")
# De "d"-toets schakelt het stuurwiel rechts
Als (char == "d"):
toggleSteering("right")
# De 'l' drukt zal schakelen de LEDs in-/ uitschakelen
Als (char == "l"):
toggleLights()
# De "x" toets zal de lus breken en het programma afsluiten
Als (char == "x"):
afdrukken ("programma afgelopen")
pauze
# Aan het einde van elke lus stopt de versnelling motor
# en wacht op haar volgende opdracht
Motor2. ChangeDutyCycle(0)
# De toetsenbord karakter variabele wordt ingesteld op leeg, klaar
# om op te slaan van de toets die is ingedrukt
char = ""
# Programma zal ophouden alle GPIO activiteit vóór beëindiging
io.Cleanup()