Wie in anderen Programmiersprachen gibt es auch in Python die Möglichkeit Funktionen bzw. Unterprogramme zu schreiben.
Diese Funktionsblöcke werden nicht mit Klammern geöffnet bzw. geschlossen, sondern durch einen Doppelpunkt „:“ bzw. durch Einrückungen.
Besonders ist, dass jede Funktion mittels dem Schlüsselwort def definiert werden muss.
#!/usr/bin/python def add(a,b): return a+b #MAIN PROGRAMM if __name__ == "__main__": print add(10,5)
Man könnte nun eine zweites Python Programm schreiben, in dem man die Funktion add(a,b) von test.py aufruft.
Dafür gibt es nun 2 verschiedene Varianten
#!/usr/bin/python from test import * if __name__ == "__main__": print(add(10,39))
#!/usr/bin/python import test if __name__ == "__main__": print(test.add(20,30))
Für unser Projekt empfehle ich zwei Python-Programme
Im Python Programm Motor.py muss die Ansteuerung der Motoren mittels GPIO erfolgen. Dafür muss man zuerst die Bibliothek RPi.GPIO einbinden.
import RPi.GPIO as GPIO
Anschließend kann man bereits die GPIO-Codes im Programm definieren und ansteuern. Dafür legt man zuerst fest, ob man die GPIO-Schnittstelle mit den
ansteuern will.
GPIO.setmode(GPIO.BCM) #oder #GPIO.setmode(GPIO.BOARD)
Als nächstes muss man in Python bekanntgeben, ob die GPIO Pins zur Eingabe (GPIO.IN) oder zur Ausgabe (GPIO.OUT) verwendet werden.
#Zum Beispiel Pin GPIO4 als Ausgabe-Pin definieren GPIO.setup(4, GPIO.OUT) GPIO.setup(17, GPIO.OUT) GPIO.setup(27, GPIO.OUT)
Nachdem definiert wurde,
kann man beginnen ein Signal auf die GPIO Pins zu legen bzw. zu empfangen.
Hier gibt es zwei Varianten der Signalübertragung
auf den GPIO Pin.
#Auf GPIO17 wird ein niedriges Signal (0) gesendet GPIO.output(17, GPIO.LOW) #Auf GPIO27 wird ein hohes Signal (1) gesendet GPIO.output(27, GPIO.LOW)
#Variable signal enthält das Signal an GPIO17 signal=GPIO.input(17) #Prüfung auf ein hohes Signal if signal==GPIO.LOW: print("Empfang eines niedrigen Signals auf GPIO17") else: print("Empfang eines hohen Signals auf GPIO17")
Über GPIO kann man nicht nur ganz niedrige (0V) oder ganze hohe Signale (3.3V) anlegen, man kann auch mithilfe von PWM (Pulsweitenmodulation) eine Spannung die zwischen LOW und HIGH liegt erzeugen und an einem GPIO Pin anlegen.
Damit kann man entweder LEDs dimmen oder Motoren schneller bzw. langsamer laufen lassen. Zweiteres kann für unser Projekt ganz hilfreich sein.
Dazu muss man die gewünschten GPIO Pins nicht nur als Input oder Output definieren, sondern zusätzlich bekanntgeben, dass man über diesen Pin auch weitere Signale (anstelle von GPIO.HIGH und GPIO.LOW) übertragen möchte.
Dies geht wiefolgt:
EnableA=GPIO.PWM(4, 100) #Frequency = 100 EnableA.start(10) #10% von HIGH Signal (Möglich sind 0-100%)
Rein physikalisch wird einfach das Signal nicht durchgehend auf die Leitung übertragen sondern eben nur 10% der Zeit. Dadurch wird der Motor nicht ständig angetrieben sondern nur in 10% der Gesamtzeit, was sich wiederum auf die Geschwindigkeit des Motors auswirkt.