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

Files at this revision

API Documentation at this revision

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