====== Programmcodes ====== ===== Funktionen ===== 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. ==== Beispiel test.py ==== #!/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 === Variante 1 - test2.py === #!/usr/bin/python from test import * if __name__ == "__main__": print(add(10,39)) === Variante 2 - test3.py === #!/usr/bin/python import test if __name__ == "__main__": print(test.add(20,30)) Für unser Projekt empfehle ich zwei Python-Programme * 1 Programm für die Tastensteuerung (Also, wann wurde welche Taste gedrückt??) (z.B.: Robot.py) * 1 Programm für die Ansteuerung des Motoren A und B (z.B.: Motor.py) ===== Motor.py ===== Im Python Programm Motor.py muss die Ansteuerung der Motoren mittels GPIO erfolgen. Dafür muss man zuerst die Bibliothek RPi.GPIO einbinden. ==== Einbinden der Bibliothek ==== import RPi.GPIO as GPIO ==== Ansteuerungsmodus der GPIO Schnittstelle ==== 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 * GPIO Nummern (**GPIO.BCM**) also **4,17 bzw. 27** für die GPIO4, GPIO17 bzw. GPIO27 oder * GPIO Board Number (**GPIO.BOARD**) also **7,11 bzw. 13** für die GPIO4, GPIO17 bzw. GPIO27 ansteuern will. {{ https://i.stack.imgur.com/gaU6t.png | GPIO Nummern }} GPIO.setmode(GPIO.BCM) #oder #GPIO.setmode(GPIO.BOARD) ==== GPIO Setup (Input or Output) ==== 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) ==== Signalübertragung auf GPIO Pins ==== Nachdem definiert wurde, - wie die GPIO Pins angesprochen werden und - ob diese als Eingabe oder als Ausgabe dienen, kann man beginnen ein Signal auf die GPIO Pins zu legen bzw. zu empfangen. Hier gibt es zwei Varianten der Signalübertragung * GPIO.LOW (legt ein niedriges Signal) * GPIO.HIGH (legt ein hohes Signal) auf den GPIO Pin. === Senden eines Signals === #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) === Empfangen eines Signals === #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") ==== PWM (Pulsweitenmodulation) ==== Ü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. {{ https://howtomechatronics.com/wp-content/uploads/2017/08/PWM-Working-Principle-Pulse-Width-Modulation-How-It-Works-768x727.png | PWM Modulation }} {{ https://howtomechatronics.com/wp-content/uploads/2017/08/L298N-Block-Diagram-Current-Flow-How-It-Works-750x400.png | PWM Modulation mit Motor }} {{ youtube>I7IFsQ4tQU8?medium }}