Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
You are viewing an older revision! See the latest version
Homepage/PWM RGB Led
« HomepageEs 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).
#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; }