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

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