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.
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;
}