Instructions

54
6.1.1 So funktioniert es
Ein Teil dieses Programms wird Ihnen bekannt vorkommen, einige Elemente aber auch gar nicht, da wir an
dieser Stelle einen Exkurs in die objektorientierte Programmierung machen. Am Anfang werden, wie
bekannt, Bibliotheken importiert. Diesmal wird nur eine einzige Variable,
LED, für den GPIO-Port 18 festge-
legt, dieser wird als Ausgang initialisiert.
print ("Strg+C beendet das Programm") Da auch dieses Programm mit einem try...except-Konstrukt
läuft und vom Benutzer angehalten werden muss, wird eine entsprechende Information für den Benutzer
angezeigt.
p = GPIO.PWM(LED, 50) Die Funktion GPIO.PWM() aus der GPIO-Bibliothek ist entscheidend für die Ausgabe
von PWM-Signalen. Diese Funktion benötigt zwei Parameter, den GPIO-Port und die Frequenz des PWM-
Signals. In unserem Fall wird der GPIO-Port über die Variable
LED festgelegt, die Frequenz ist 50 Hertz
(Schwingungen pro Sekunde).
Warum 50 Hertz die ideale Frequenz für PWM ist
Das menschliche Auge nimmt Lichtwechsel schneller als 20 Hertz nicht mehr wahr. Da das Wechsel-
stromnetz in Europa eine Frequenz von 50 Hertz nutzt, blinken viele Beleuchtungskörper mit dieser Fre-
quenz, die vom Auge nicht wahrgenommen wird. Würde eine LED mit mehr als 20 Hertz, aber weniger
als 50 Hertz blinken, könnte es zu Interferenzen mit anderen Lichtquellen kommen, wodurch der
Dimmeffekt nicht mehr gleichmäßig erschiene.
GPIO.PWM() erzeugt ein sogenanntes Objekt, das in der Variablen p gespeichert wird. Solche Objekte sind
weit mehr als nur einfache Variablen. Objekte können verschiedene Eigenschaften haben und über soge-
nannte Methoden beeinflusst werden. Methoden werden, durch einen Punkt getrennt, direkt hinter dem
Objektnamen angegeben.
p.start(0) Die Methode start() startet die Generierung des PWM-Signals. Dazu muss noch ein Tastver-
hältnis angegeben werden. In unserem Fall ist das Tastverhältnis
0, die LED ist also immer ausgeschaltet.
Jetzt startet die Endlosschleife, in der direkt nacheinander zwei Schleifen eingebettet sind, die abwechselnd
die LED heller und dunkler werden lassen.
for c in range(0, 101, 2): Die Schleife zählt in Schritten von 2 von 0 bis 100. Als Ende einer for-Schleife
wird immer der Wert angegeben, der gerade nicht erreicht wird, in unserem Fall
101.
p.ChangeDutyCycle(c) In jedem Schleifendurchlauf setzt die Methode ChangeDutyCycle() das
Tastverhältnis des PWM-Objekts auf den Wert des Schleifenzählers, also jedes Mal um 2 % höher, bis es
beim letzten Durchlauf auf 100 % steht und die LED mit voller Helligkeit leuchtet.
time.sleep(0.1) In jedem Schleifendurchlauf werden 0,1 Sekunden gewartet, bevor der nächste Durchlauf
das Tastverhältnis wieder um 2 % erhöht.
for c in range(100, -1, -2):
p.ChangeDutyCycle(c); time.sleep(0.1)