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).

Dependencies:   mbed

Revision:
0:0f5932820c1a
--- /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