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).
main.cpp
- Committer:
- Aagrus
- Date:
- 2020-02-03
- Revision:
- 0:0f5932820c1a
File content as of revision 0:0f5932820c1a:
#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; }