Markus Reiner
/
testAnifOhneClass
ohne class
Diff: main.cpp
- Revision:
- 0:2acc9e1d4fff
- Child:
- 1:580bd2d56f39
diff -r 000000000000 -r 2acc9e1d4fff main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu Nov 29 17:40:31 2018 +0000 @@ -0,0 +1,129 @@ +#include "mbed.h" + +DigitalIn btn(P14); // für den Test ist nur dieser erforderlich + + +BusOut BoardLeds ( LED1 , LED2, LED3, LED4); + +Ticker tickerflipper; // Ticker für blinken der LED +volatile int blinkCounter=0; // Volatile, damit es nicht auf unterschiedlichen Cores ausgeführt wird + +enum State {ST_LEDAUS=0, ST_LEDEIN}; +State state; + +bool pressed = false; + +void flipper() // +{ + blinkCounter++; // Variable die hochgezählt wird um die LED 2 mal blinken zu lassen + Led4 = !Led4; // umschalten der LED +} + + +void rise(void) +{ + wait_ms(100); // Entprellung der Taste, bei mir 100ms da der Taster furchtbar prellt... + pressed = true; // Umschalten auf WAHR, es wurde gedrückt +} + +bool CheckFlag() +{ + if (pressed) // Abfrage ob pressed WAHR ist + { + pressed=false; // Rücksetzen wieder auf Status FALSCH + return true; // Rückgabe bei CheckFlag das WAHR ist + } + return false; // Wenn nicht pressed Wahr ist wird CheckFlag als FALSCH zurück gegeben +} + + +void ST_LedAus (void) +{ + + + + printf("State: 1 (Aus)"); // Ausgabe auf der seriellen Console + +//_______________entry____________________\\ + +//_______________do_______________________\\ + + while(true) + { + Led1 = 0; // Led1 wird auf LOW gesetzt + if(CheckFlag()) // Ist CheckFlag WAHR dann + { + state = ST_LEDEIN; // Wechsel auf Status EIN + +//______________exit_______________________\\ + + return; + } + } +} + + +void ST_LedEin (void) +{ + + printf("State: 2 (Ein)"); // Ausgabe auf der seriellen Console + + +//____________aufruf um die Led blinken zu lassen____\\ + tickerflipper.attach(&flipper, 0.3); // the address of the function to be attached (flip) and the interval (0,3 seconds) + + while(true) // Dauerschleife + { + if ( blinkCounter >= 4) break;// Ausbruch aus der Whileschleife wenn der blinkCounter größer gleich 4 ist + } + tickerflipper.detach(); // Tiker deaktivieren + blinkCounter=0; // blinkCounter rücksetzen auf 0 damit es wieder von vorne losgehen kann + + +//_____________do______________\\ + + while(true) { + Led1 = 1; + + if(CheckFlag()) + { + state = ST_LEDAUS; + +//_______________exit______________\\ + + return; + } + } +} + +void ST_Error (void) +{ + printf("State: ERROR!!!"); + return; +} + + +void stateMachine() +{ + switch (state) + { + case ST_LEDAUS: ST_LedAus(); + break; + case ST_LEDEIN: ST_LedEin(); + break; + default: ST_Error(); // sollte nicht auftreten :-) + break; + } +} + + + +int main() +{ + SW1.rise(&rise); //.fall(&fall); + state = ST_LEDAUS; + while(true) + { + stateMachine(); + } +} \ No newline at end of file