ohne class

Dependencies:   mbed

Committer:
mexx
Date:
Thu Nov 29 17:40:31 2018 +0000
Revision:
0:2acc9e1d4fff
Child:
1:580bd2d56f39
ohne class

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mexx 0:2acc9e1d4fff 1 #include "mbed.h"
mexx 0:2acc9e1d4fff 2
mexx 0:2acc9e1d4fff 3 DigitalIn btn(P14); // für den Test ist nur dieser erforderlich
mexx 0:2acc9e1d4fff 4
mexx 0:2acc9e1d4fff 5
mexx 0:2acc9e1d4fff 6 BusOut BoardLeds ( LED1 , LED2, LED3, LED4);
mexx 0:2acc9e1d4fff 7
mexx 0:2acc9e1d4fff 8 Ticker tickerflipper; // Ticker für blinken der LED
mexx 0:2acc9e1d4fff 9 volatile int blinkCounter=0; // Volatile, damit es nicht auf unterschiedlichen Cores ausgeführt wird
mexx 0:2acc9e1d4fff 10
mexx 0:2acc9e1d4fff 11 enum State {ST_LEDAUS=0, ST_LEDEIN};
mexx 0:2acc9e1d4fff 12 State state;
mexx 0:2acc9e1d4fff 13
mexx 0:2acc9e1d4fff 14 bool pressed = false;
mexx 0:2acc9e1d4fff 15
mexx 0:2acc9e1d4fff 16 void flipper() //
mexx 0:2acc9e1d4fff 17 {
mexx 0:2acc9e1d4fff 18 blinkCounter++; // Variable die hochgezählt wird um die LED 2 mal blinken zu lassen
mexx 0:2acc9e1d4fff 19 Led4 = !Led4; // umschalten der LED
mexx 0:2acc9e1d4fff 20 }
mexx 0:2acc9e1d4fff 21
mexx 0:2acc9e1d4fff 22
mexx 0:2acc9e1d4fff 23 void rise(void)
mexx 0:2acc9e1d4fff 24 {
mexx 0:2acc9e1d4fff 25 wait_ms(100); // Entprellung der Taste, bei mir 100ms da der Taster furchtbar prellt...
mexx 0:2acc9e1d4fff 26 pressed = true; // Umschalten auf WAHR, es wurde gedrückt
mexx 0:2acc9e1d4fff 27 }
mexx 0:2acc9e1d4fff 28
mexx 0:2acc9e1d4fff 29 bool CheckFlag()
mexx 0:2acc9e1d4fff 30 {
mexx 0:2acc9e1d4fff 31 if (pressed) // Abfrage ob pressed WAHR ist
mexx 0:2acc9e1d4fff 32 {
mexx 0:2acc9e1d4fff 33 pressed=false; // Rücksetzen wieder auf Status FALSCH
mexx 0:2acc9e1d4fff 34 return true; // Rückgabe bei CheckFlag das WAHR ist
mexx 0:2acc9e1d4fff 35 }
mexx 0:2acc9e1d4fff 36 return false; // Wenn nicht pressed Wahr ist wird CheckFlag als FALSCH zurück gegeben
mexx 0:2acc9e1d4fff 37 }
mexx 0:2acc9e1d4fff 38
mexx 0:2acc9e1d4fff 39
mexx 0:2acc9e1d4fff 40 void ST_LedAus (void)
mexx 0:2acc9e1d4fff 41 {
mexx 0:2acc9e1d4fff 42
mexx 0:2acc9e1d4fff 43
mexx 0:2acc9e1d4fff 44
mexx 0:2acc9e1d4fff 45 printf("State: 1 (Aus)"); // Ausgabe auf der seriellen Console
mexx 0:2acc9e1d4fff 46
mexx 0:2acc9e1d4fff 47 //_______________entry____________________\\
mexx 0:2acc9e1d4fff 48
mexx 0:2acc9e1d4fff 49 //_______________do_______________________\\
mexx 0:2acc9e1d4fff 50
mexx 0:2acc9e1d4fff 51 while(true)
mexx 0:2acc9e1d4fff 52 {
mexx 0:2acc9e1d4fff 53 Led1 = 0; // Led1 wird auf LOW gesetzt
mexx 0:2acc9e1d4fff 54 if(CheckFlag()) // Ist CheckFlag WAHR dann
mexx 0:2acc9e1d4fff 55 {
mexx 0:2acc9e1d4fff 56 state = ST_LEDEIN; // Wechsel auf Status EIN
mexx 0:2acc9e1d4fff 57
mexx 0:2acc9e1d4fff 58 //______________exit_______________________\\
mexx 0:2acc9e1d4fff 59
mexx 0:2acc9e1d4fff 60 return;
mexx 0:2acc9e1d4fff 61 }
mexx 0:2acc9e1d4fff 62 }
mexx 0:2acc9e1d4fff 63 }
mexx 0:2acc9e1d4fff 64
mexx 0:2acc9e1d4fff 65
mexx 0:2acc9e1d4fff 66 void ST_LedEin (void)
mexx 0:2acc9e1d4fff 67 {
mexx 0:2acc9e1d4fff 68
mexx 0:2acc9e1d4fff 69 printf("State: 2 (Ein)"); // Ausgabe auf der seriellen Console
mexx 0:2acc9e1d4fff 70
mexx 0:2acc9e1d4fff 71
mexx 0:2acc9e1d4fff 72 //____________aufruf um die Led blinken zu lassen____\\
mexx 0:2acc9e1d4fff 73 tickerflipper.attach(&flipper, 0.3); // the address of the function to be attached (flip) and the interval (0,3 seconds)
mexx 0:2acc9e1d4fff 74
mexx 0:2acc9e1d4fff 75 while(true) // Dauerschleife
mexx 0:2acc9e1d4fff 76 {
mexx 0:2acc9e1d4fff 77 if ( blinkCounter >= 4) break;// Ausbruch aus der Whileschleife wenn der blinkCounter größer gleich 4 ist
mexx 0:2acc9e1d4fff 78 }
mexx 0:2acc9e1d4fff 79 tickerflipper.detach(); // Tiker deaktivieren
mexx 0:2acc9e1d4fff 80 blinkCounter=0; // blinkCounter rücksetzen auf 0 damit es wieder von vorne losgehen kann
mexx 0:2acc9e1d4fff 81
mexx 0:2acc9e1d4fff 82
mexx 0:2acc9e1d4fff 83 //_____________do______________\\
mexx 0:2acc9e1d4fff 84
mexx 0:2acc9e1d4fff 85 while(true) {
mexx 0:2acc9e1d4fff 86 Led1 = 1;
mexx 0:2acc9e1d4fff 87
mexx 0:2acc9e1d4fff 88 if(CheckFlag())
mexx 0:2acc9e1d4fff 89 {
mexx 0:2acc9e1d4fff 90 state = ST_LEDAUS;
mexx 0:2acc9e1d4fff 91
mexx 0:2acc9e1d4fff 92 //_______________exit______________\\
mexx 0:2acc9e1d4fff 93
mexx 0:2acc9e1d4fff 94 return;
mexx 0:2acc9e1d4fff 95 }
mexx 0:2acc9e1d4fff 96 }
mexx 0:2acc9e1d4fff 97 }
mexx 0:2acc9e1d4fff 98
mexx 0:2acc9e1d4fff 99 void ST_Error (void)
mexx 0:2acc9e1d4fff 100 {
mexx 0:2acc9e1d4fff 101 printf("State: ERROR!!!");
mexx 0:2acc9e1d4fff 102 return;
mexx 0:2acc9e1d4fff 103 }
mexx 0:2acc9e1d4fff 104
mexx 0:2acc9e1d4fff 105
mexx 0:2acc9e1d4fff 106 void stateMachine()
mexx 0:2acc9e1d4fff 107 {
mexx 0:2acc9e1d4fff 108 switch (state)
mexx 0:2acc9e1d4fff 109 {
mexx 0:2acc9e1d4fff 110 case ST_LEDAUS: ST_LedAus();
mexx 0:2acc9e1d4fff 111 break;
mexx 0:2acc9e1d4fff 112 case ST_LEDEIN: ST_LedEin();
mexx 0:2acc9e1d4fff 113 break;
mexx 0:2acc9e1d4fff 114 default: ST_Error(); // sollte nicht auftreten :-)
mexx 0:2acc9e1d4fff 115 break;
mexx 0:2acc9e1d4fff 116 }
mexx 0:2acc9e1d4fff 117 }
mexx 0:2acc9e1d4fff 118
mexx 0:2acc9e1d4fff 119
mexx 0:2acc9e1d4fff 120
mexx 0:2acc9e1d4fff 121 int main()
mexx 0:2acc9e1d4fff 122 {
mexx 0:2acc9e1d4fff 123 SW1.rise(&rise); //.fall(&fall);
mexx 0:2acc9e1d4fff 124 state = ST_LEDAUS;
mexx 0:2acc9e1d4fff 125 while(true)
mexx 0:2acc9e1d4fff 126 {
mexx 0:2acc9e1d4fff 127 stateMachine();
mexx 0:2acc9e1d4fff 128 }
mexx 0:2acc9e1d4fff 129 }