Erstellt für das Schulfach TINF
You are viewing an older revision! See the latest version
Homepage/PWM RGB Led
« HomepageEs wird
- PWM (Pulsweitenmodulation),
- 2 Buttons,
- Colour Variable (enum) und eine
- RGB-LED verwendet, um eine RGB-LED mit seiner vollen Farbpracht Anzusteuern!
Funktion der Buttons:
- Button 1 -> Aufwärtszähler vom Ausgangspunkt [R=0, G=1, B=2] (aktueller Farbwert + 1)
- Button 2 -> Abwärtszähler vom Ausgangspunkt [R=0, G=1, B=2] (aktueller Farbwert - 1)
Mit dem Poti lässt sich die "Helligkeit" der ausgewählten Farbe regeln. Somit lassen sich alle Farben mit einer Auflösung von 256 anzeigen (16 777 216 Farben).
#include <mbed.h> // Lege Farbcodewert fest enum Colour { red, blue, green }; // Buttonevents bool button1_clicked = false; bool button2_clicked = false; void Button1_Down() { button1_clicked = true; } void Button1_Up() { button1_clicked = false; } void Button2_Down() { button2_clicked = true; } void Button2_Up() { button2_clicked = false; } Colour ColorChange(Colour aktualColour, bool countUp); void Button1(); void Button2(); int main() { // Legt eine Kommunikation zum PC an (Seriell) Serial pc(USBTX, USBRX); // Eingänge / Ausgänge AnalogIn poti(PA_4); PwmOut ledRed(PA_9); PwmOut ledBlue(PA_10); PwmOut ledGreen(PA_11); // Interrupt für die Buttons InterruptIn button1(PA_1); InterruptIn button2(PA_3); button1.rise(&Button1_Down); button1.fall(&Button1_Up); button2.rise(&Button2_Down); button2.fall(&Button2_Up); // Startfarbe = rot Colour colour = red; // Für Buttons (Funktion schon ausgeführt oder nicht) bool isSend1 = false; bool isSend2 = false; // Für Poti (alter und neuer Wert) float lastValue = 0; float aktualValue = 0; while(1) { aktualValue = poti.read(); // Buttons // Button1(); Button2(); // Aktualisierung für den PWM-Wert auf der LED // if (aktualValue != lastValue) { if (colour == red) { ledRed = aktualValue; } else if (colour == blue) { ledBlue = aktualValue; } else { ledGreen = aktualValue; } lastValue = aktualValue; } } } void Button1() { if (button1_clicked && !isSend1) { isSend1 = true; colour = ColorChange(colour, true); pc.printf("Der Farbwert ist: %f\n", colour); } else if (!button1_clicked && isSend1) { isSend1 = false; } } void Button2() { if (button2_clicked && !isSend2) { isSend2 = true; colour = ColorChange(colour, false); pc.printf("Der Farbwert ist: %d\n", colour); } else if (!button2_clicked && isSend2) { isSend2 = false; } } Colour ColorChange(Colour aktualColour, bool countUp) { // Legt die aktuelle Farbe fest (aktualColour -> aktueller Farbwert, countUp -> Farbewert aufwärts oder verringern) switch(aktualColour) { // Kurzsyntax für if else Abfragen --> bei true aufwärts zählen case red: countUp ? aktualColour = blue : aktualColour = green; break; case blue: countUp ? aktualColour = green : aktualColour = red; break; case green: countUp ? aktualColour = red : aktualColour = blue; break; } return aktualColour; }