Das bedeutet: Eine Lichtemitterdiode (LED), die aus drei einfarbigen LED besteht (R=Rot, G=Grün, B=Blau) wird über das Verfahren der Pulsweitenmodulation (PWM) so angesteuert, dass sie in verschiedenen Helligkeiten und Farben leuchten kann.
Klingt vernünftig, ist aber nicht selbstverständlich!
Der Mikrocontroller arbeitet digital, er kennt nur die beiden Werte Aus oder An (0 oder 1). Dazwischen gibt es für ihn nichts. Die RGB-LED soll aber analog leuchten, also viele verschiede Farben und Helligkeiten zeigen. Der Mikrocontroller und die RGB-LED müssen zusammengebracht werden. Und das geht über die Pulsweitenmodulation. Der Begriff klingt viel schlimmer, als es eigentlich ist.
Es wird als erstes eine Taktzeit festgelegt. Sie beträgt im Beispiel eine Tausenstel Sekunde. Das entspricht einer Frequenz vom 1 kHz=1000 Hz. Während dieser Zeit kann ein digitaler Ausgang nur sehr kurz auf 1 (An) und die meiste Zeit auf 0 (Aus) sein oder eben genau anders herum, mehr An als Aus. Da unser Auge recht träge reagiert, bekommt es die schnellen Wechsel gar nicht mit. Im ersten Fall sieht es die LED einfach dunkler als im zweiten Fall.
Ist das nun schwer zu programmieren? NEIN! Es gibt eine fertige Klasse mit dem Namen PWM, die bereits alles kann. Man braucht die Klasse nur zu importieren und dann Instanzen davon ableiten.
Die neuen Objekte heißen pwm_rot, pwm_gruen und pwm_blau. Sie wissen nach der Initialisierung, an welchen Pin ihre LED angeschlossen ist (Rot: 18, Grün: 19 und Blau 20). Die Pins sind für die Ausgabe bereit (Pin.OUT) und die Frequenz ist auf 1000 Hz eingestellt.
Um die Helligkeit für eine Farbe einzustellen, schreibt man nun einfach
pwm_rot.duty(1023)
oder, da die Farbobjekte in dem Array farben stecken
farben[0].duty(1023)
Der Parameter, der der Methode duty übergeben werden muss, liegt zwischen 0 und 1023. Je größer der Wert ist, um so länger sind je einen Takt die LED-An-Phasen. (duty=Aufgabe)
Die Funktion für die Helligkeit einer LED erwartet 4 Parameter:
Wichtig: Die Funktion muss gleich nach dem Import der Klassen eingefügt werden. Ansonsten funktioniert sie nicht richtig.
Bevor man nun den Regenbogen startet, stellt man die wartezeit und die Starthelligkeiten ein: Rot auf ganz hell und Grün und Blau auf ganz aus.
In der unendlichen Schleife beginnt man mit dem Einschalten von Grün und dann dem Ausschalten von Rot. Insgesamt 6 for-Schleifen bringen den Regenbogen zustande.
Aufgabe: Informiere dich über die Zeile for i in range(1023, 0, -1). Welche Bedeutung haben die drei Werte in der Klammer?