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.
main.cpp@0:05d73097e319, 2014-09-29 (annotated)
- 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?
| User | Revision | Line number | New 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 |