Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Homepage/Lauflicht
« HomepageIn diesem Program wird das Lauflicht mit 2 Buttons gesteuert! Dieser muss immer gedrückt bleiben, um die gewünschte Aktion durchzuführen.
- Button 1 -> Lauflicht nach links
- Button 2 -> Lauflicht nach rechts
- Button 1&2 -> 4er Lauflicht (abwechselnd rechts und links)
- 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);
}