MrHeisenberg AUG|Wings / Mbed 2 deprecated StateMachine

Dependencies:   mbed

Committer:
philipp19961
Date:
Mon Sep 29 12:05:03 2014 +0000
Revision:
0:05d73097e319
Child:
1:c5769cd78933
Einfach ge?ndert, no idea obs worked

Who changed what in which revision?

UserRevisionLine numberNew contents of line
philipp19961 0:05d73097e319 1 #include "mbed.h"
philipp19961 0:05d73097e319 2
philipp19961 0:05d73097e319 3 Ticker tick;
philipp19961 0:05d73097e319 4 DigitalOut led1(LED1);
philipp19961 0:05d73097e319 5 DigitalOut led2(LED2);
philipp19961 0:05d73097e319 6 DigitalOut led3(LED3);
philipp19961 0:05d73097e319 7 DigitalOut led4(LED4);
philipp19961 0:05d73097e319 8
philipp19961 0:05d73097e319 9 InterruptIn button(p12);
philipp19961 0:05d73097e319 10
philipp19961 0:05d73097e319 11 // Zum Schalten: 1 Taster PINA PA0
philipp19961 0:05d73097e319 12 // 1. Funktion
philipp19961 0:05d73097e319 13 // Start-Taste 1x betätigen:
philipp19961 0:05d73097e319 14 // Dauerlicht aller 4 LEDs
philipp19961 0:05d73097e319 15 // 2. Funktion
philipp19961 0:05d73097e319 16 // Start-Taste ein 2.mal betätigen:
philipp19961 0:05d73097e319 17 // LEDs blinken im ca. 400 Millisekunden-Takt; 200 msec Ein, 200 msec Aus
philipp19961 0:05d73097e319 18 // Ausschalten des Rücklichts
philipp19961 0:05d73097e319 19 // Die Start-Taste ein 3.mal betätigen:
philipp19961 0:05d73097e319 20 // Alle LEDs aus.
philipp19961 0:05d73097e319 21
philipp19961 0:05d73097e319 22
philipp19961 0:05d73097e319 23 //volatile uint8_t count;
philipp19961 0:05d73097e319 24 volatile unsigned int count;
philipp19961 0:05d73097e319 25 volatile unsigned int newEvent =0;
philipp19961 0:05d73097e319 26 volatile unsigned int event=0, state=0;
philipp19961 0:05d73097e319 27
philipp19961 0:05d73097e319 28 /* Prototypen der Funktionen */
philipp19961 0:05d73097e319 29 int no_fu();
philipp19961 0:05d73097e319 30 int ledsEin();
philipp19961 0:05d73097e319 31 int msec300TimerOn();
philipp19961 0:05d73097e319 32 int ledsAusTimerOff();
philipp19961 0:05d73097e319 33 int ledsTogglen();
philipp19961 0:05d73097e319 34
philipp19961 0:05d73097e319 35 unsigned char nextstate_tab[2][3]=
philipp19961 0:05d73097e319 36 //present state 0 1 2
philipp19961 0:05d73097e319 37 //------------------------
philipp19961 0:05d73097e319 38 /* event 0 */{{ 1, 2, 0 }, // next
philipp19961 0:05d73097e319 39 /* event 1 */ { 0, 1, 2 }}; // state
philipp19961 0:05d73097e319 40 // state=nextstate_tab[event][state]; // gehe auf naechsten Zustand
philipp19961 0:05d73097e319 41
philipp19961 0:05d73097e319 42 /*************************************************************/
philipp19961 0:05d73097e319 43 /* Tabelle fuer Aktionsroutinen fuer die Zustaende bei Input */
philipp19961 0:05d73097e319 44 /*************************************************************/
philipp19961 0:05d73097e319 45 // p r e s e n t s t a t e
philipp19961 0:05d73097e319 46 int(*action[2][3])()= // 0 1 2
philipp19961 0:05d73097e319 47 /* event 0 */ {{ ledsEin, msec300TimerOn, ledsAusTimerOff },
philipp19961 0:05d73097e319 48 /* event 1 */ { no_fu, no_fu, ledsTogglen }};
philipp19961 0:05d73097e319 49 // (*action[event][state])(); // suche in Tabelle nach Funktion
philipp19961 0:05d73097e319 50
philipp19961 0:05d73097e319 51
philipp19961 0:05d73097e319 52 /* Aktionsroutinen, functions */
philipp19961 0:05d73097e319 53 int no_fu() // keine function - tue nichts
philipp19961 0:05d73097e319 54 {
philipp19961 0:05d73097e319 55 return(0);
philipp19961 0:05d73097e319 56 }
philipp19961 0:05d73097e319 57
philipp19961 0:05d73097e319 58 int msec300TimerOn()
philipp19961 0:05d73097e319 59 {
philipp19961 0:05d73097e319 60 __enable_irq();
philipp19961 0:05d73097e319 61 return(1);
philipp19961 0:05d73097e319 62 }
philipp19961 0:05d73097e319 63
philipp19961 0:05d73097e319 64 int ledsAusTimerOff()
philipp19961 0:05d73097e319 65 {
philipp19961 0:05d73097e319 66 led1 = 0;
philipp19961 0:05d73097e319 67 led2 = 0;
philipp19961 0:05d73097e319 68 led3 = 0;
philipp19961 0:05d73097e319 69 led4 = 0;
philipp19961 0:05d73097e319 70 __disable_irq();
philipp19961 0:05d73097e319 71 return(2);
philipp19961 0:05d73097e319 72 }
philipp19961 0:05d73097e319 73
philipp19961 0:05d73097e319 74 int ledsTogglen()
philipp19961 0:05d73097e319 75 {
philipp19961 0:05d73097e319 76 led1 = !led1;
philipp19961 0:05d73097e319 77 led2 = !led2;
philipp19961 0:05d73097e319 78 led3 = !led3;
philipp19961 0:05d73097e319 79 led4 = !led4;
philipp19961 0:05d73097e319 80 return(3);
philipp19961 0:05d73097e319 81 }
philipp19961 0:05d73097e319 82
philipp19961 0:05d73097e319 83 int ledsEin()
philipp19961 0:05d73097e319 84 {
philipp19961 0:05d73097e319 85 led1 = 1;
philipp19961 0:05d73097e319 86 led2 = 1;
philipp19961 0:05d73097e319 87 led3 = 1;
philipp19961 0:05d73097e319 88 led4 = 1;
philipp19961 0:05d73097e319 89 return(4);
philipp19961 0:05d73097e319 90 }
philipp19961 0:05d73097e319 91
philipp19961 0:05d73097e319 92 // interrupt SR
philipp19961 0:05d73097e319 93 void timertick()
philipp19961 0:05d73097e319 94 {
philipp19961 0:05d73097e319 95 ledsTogglen();
philipp19961 0:05d73097e319 96 }
philipp19961 0:05d73097e319 97
philipp19961 0:05d73097e319 98 // functions
philipp19961 0:05d73097e319 99 void initTimer()
philipp19961 0:05d73097e319 100 {
philipp19961 0:05d73097e319 101 tick.attach(&timertick, 0.2);
philipp19961 0:05d73097e319 102 }
philipp19961 0:05d73097e319 103
philipp19961 0:05d73097e319 104 void debounce(PinName name, unsigned char samples)
philipp19961 0:05d73097e319 105 {
philipp19961 0:05d73097e319 106 DigitalIn joystick(name);
philipp19961 0:05d73097e319 107
philipp19961 0:05d73097e319 108 for(unsigned char j = 0; j < samples; j++)
philipp19961 0:05d73097e319 109 {
philipp19961 0:05d73097e319 110 if(joystick == 1)
philipp19961 0:05d73097e319 111 j++;
philipp19961 0:05d73097e319 112 else
philipp19961 0:05d73097e319 113 j = 0;
philipp19961 0:05d73097e319 114
philipp19961 0:05d73097e319 115 if(j == samples)
philipp19961 0:05d73097e319 116 break;
philipp19961 0:05d73097e319 117 }
philipp19961 0:05d73097e319 118 }
philipp19961 0:05d73097e319 119
philipp19961 0:05d73097e319 120 void buttonpress()
philipp19961 0:05d73097e319 121 {
philipp19961 0:05d73097e319 122 debounce(p12, 8);
philipp19961 0:05d73097e319 123
philipp19961 0:05d73097e319 124 event =0;
philipp19961 0:05d73097e319 125 newEvent =1;
philipp19961 0:05d73097e319 126
philipp19961 0:05d73097e319 127 if (newEvent)
philipp19961 0:05d73097e319 128 {
philipp19961 0:05d73097e319 129 __disable_irq();
philipp19961 0:05d73097e319 130 newEvent =0;
philipp19961 0:05d73097e319 131 (*action[event][state])(); // suche in Tabelle nach Funktion
philipp19961 0:05d73097e319 132 state=nextstate_tab[event][state]; // gehe auf naechsten Zustand
philipp19961 0:05d73097e319 133 __enable_irq();
philipp19961 0:05d73097e319 134 }
philipp19961 0:05d73097e319 135 }
philipp19961 0:05d73097e319 136
philipp19961 0:05d73097e319 137 int main()
philipp19961 0:05d73097e319 138 {
philipp19961 0:05d73097e319 139
philipp19961 0:05d73097e319 140 button.rise(&buttonpress);
philipp19961 0:05d73097e319 141 led1 = 0;
philipp19961 0:05d73097e319 142 led2 = 0;
philipp19961 0:05d73097e319 143 led3 = 0;
philipp19961 0:05d73097e319 144 led4 = 0;
philipp19961 0:05d73097e319 145
philipp19961 0:05d73097e319 146 initTimer();
philipp19961 0:05d73097e319 147
philipp19961 0:05d73097e319 148 newEvent = 0;
philipp19961 0:05d73097e319 149 state=0;
philipp19961 0:05d73097e319 150 event=0;
philipp19961 0:05d73097e319 151 }
philipp19961 0:05d73097e319 152
philipp19961 0:05d73097e319 153