Erstellt für das Schulfach TINF

Homepage/PWM RGB Led

« Homepage

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

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

Zurück


All wikipages