Erstellt für das Schulfach TINF

You are viewing an older revision! See the latest version

Homepage/Lauflicht

« Homepage

In diesem Program wird das Lauflicht mit 2 Buttons gesteuert! Dieser muss immer gedrückt bleiben, um die gewünschte Aktion durchzuführen.

  1. Button 1 -> Lauflicht nach links
  2. Button 2 -> Lauflicht nach rechts
  3. Button 1&2 -> 4er Lauflicht (abwechselnd rechts und links)
  4. kein Button -> Kein Lauflicht

Es wird auch ein Timer für die unterschiedlichen Frequenzen verwendet!

#include <mbed.h>


BusIn button(PA_1, PA_3);
BusOut leds(PA_12, PB_0, PB_1, PA_8, PB_5, PB_4, PA_7, PB_3);

Timer tim1;   // Timer init
int x = 0;    // Zum abfragen, ob das Buttonevent gleich ist oder nicht



void Button1();             // einzel-Lauflicht nach links
void Button2();             // einzel-Lauflicht nach rechts
void Button12();            // Umschalten (rechte Seite, dann linke Seite usw.)
void Button0();             // Zurücksetzen (alle LEDs LOW)
void Reset(int setValue);   // Setzt Timer und Ausgänge zurück bei Änderung des BusIn wertes (Event)


int main() 
{
  // Startet den Timer
  tim1.start();


  while(1) 
  {
    // Abfragen beider ButtonStates und jeweilige Aktion ausführen (PullDown --> Negative Logik)
    if (button == 0b00)        Button12();
    else if (button == 0b10)   Button1();
    else if (button == 0b01)   Button2();
    else                       Button0();
  }
}


// Zurücksetzen bei Änderung der gedrückten Buttons
void Reset(int setValue)
{
  if (x != setValue)
  {
    leds = 0;
    tim1.reset();
    x = setValue;
  }
}



// Wenn Button 1 gedrückt wird
void Button1()
{
  Reset(1);



  if (tim1.read_ms() >= 200)
  {
    // Timer zurücksetzen
    tim1.reset();


    // LED - Steuerung
    leds = leds << 1;

    if (leds == 0)
      leds = 0b00000001;
  }
}



// Wenn Button 2 gedrückt wird
void Button2()
{
  Reset(2);

  if (tim1.read_ms() >= 80)
  {
    // Timer zurücksetzen
    tim1.reset();


    // LED - Steuerung
    leds = leds >> 1;

    if (leds == 0)
      leds = 0b10000000;
  }
}



// Wenn Button 1 und Button 2 gedrückt sind
void Button12()
{
  Reset(3);

  if (tim1.read_ms() >= 500)
  {
    // Timer zurücksetzen
    tim1.reset();


    // LED - Steuerung
    if (leds == 0b11110000)       leds = 0b00001111;
    else if (leds == 0b00001111)  leds = 0b11110000;
    else                          leds = 0b00001111;
  }
}


// Wenn kein Button gedrückt wird
void Button0()
{
  Reset(0);
}

Zurück


All wikipages