Erstellt für das Schulfach TINF
You are viewing an older revision! See the latest version
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); }