Es wird PWM (Pulsweitenmodulation), 2 Buttons, 1 Potentiometer, 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).
Revision 0:0f5932820c1a, committed 2020-02-03
- Comitter:
- Aagrus
- Date:
- Mon Feb 03 16:44:53 2020 +0000
- Commit message:
- Eine fertige PWM-Ansteuerung einer RGB-LED mittels 2 Buttons
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
mbed.bld | Show annotated file Show diff for this revision Revisions of this file |
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Mon Feb 03 16:44:53 2020 +0000 @@ -0,0 +1,132 @@ +#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); + + +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(); + + + + if (button1_clicked && !isSend1) + { + isSend1 = true; + colour = ColorChange(colour, true); + pc.printf("Der Farbwert ist: %d\n", colour); + } + + else if (!button1_clicked && isSend1) + { + isSend1 = false; + } + + + + 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; + } + + + + // 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; + } + } +} + + + +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; +} \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Mon Feb 03 16:44:53 2020 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/mbed_official/code/mbed/builds/65be27845400 \ No newline at end of file