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! Ist der 1.Button gedrückt, Lauflicht nach links. Ist der 2. Button gedrückt, Lauflicht nach rechts. Sind beide Buttons gedrückt, lösen sie ein anderes Lauflicht aus. Wenn keiner gedrückt ist, hat man kein Lauflicht.

Es wird ein Timer 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
    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)
  {
    Button0();
    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 bzw. ein ButtonEvent-Wechsel stattfindet
void Button0()
{
  // LEDs werden zurückgesetzt
  leds = 0;
}

Zurück


All wikipages