Oliver Ainhirn
/
STM_01
Mein 1. Versuch
main.cpp@0:6ed0ae055a52, 2018-11-08 (annotated)
- Committer:
- corsa1600
- Date:
- Thu Nov 08 18:32:28 2018 +0000
- Revision:
- 0:6ed0ae055a52
Erster Versuch der STM
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
corsa1600 | 0:6ed0ae055a52 | 1 | #include "mbed.h" |
corsa1600 | 0:6ed0ae055a52 | 2 | #include "C12832.h" |
corsa1600 | 0:6ed0ae055a52 | 3 | |
corsa1600 | 0:6ed0ae055a52 | 4 | DigitalOut Led1(LED1, 0); // 1. LED am MBED-Board |
corsa1600 | 0:6ed0ae055a52 | 5 | DigitalOut Led2(LED2, 0); // 2. LED am MBED-Board |
corsa1600 | 0:6ed0ae055a52 | 6 | DigitalOut Led3(LED3, 0); // 3. LED am MBED-Board |
corsa1600 | 0:6ed0ae055a52 | 7 | DigitalOut Led4(LED4, 0); // 4. LED am MBED-Board |
corsa1600 | 0:6ed0ae055a52 | 8 | InterruptIn SW1(p13); // LEFT am MBED-Board |
corsa1600 | 0:6ed0ae055a52 | 9 | InterruptIn SW1(p14); // CENTER am MBED-Board |
corsa1600 | 0:6ed0ae055a52 | 10 | InterruptIn SW2(p15); // UP am MBED-Board |
corsa1600 | 0:6ed0ae055a52 | 11 | InterruptIn SW3(p12); // DOWN am MBED-Board |
corsa1600 | 0:6ed0ae055a52 | 12 | InterruptIn SW4(p16); // RIGHT am MBED-Board |
corsa1600 | 0:6ed0ae055a52 | 13 | |
corsa1600 | 0:6ed0ae055a52 | 14 | Ticker flipper; // Ticker für blinken der LED |
corsa1600 | 0:6ed0ae055a52 | 15 | volatile int blinkCount=0; // Volatile, damit es nicht auf unterschiedlichen Cores ausgeführt wird |
corsa1600 | 0:6ed0ae055a52 | 16 | |
corsa1600 | 0:6ed0ae055a52 | 17 | |
corsa1600 | 0:6ed0ae055a52 | 18 | //______________ LCD ____________________________\\ |
corsa1600 | 0:6ed0ae055a52 | 19 | |
corsa1600 | 0:6ed0ae055a52 | 20 | C12832 lcd(p5, p7, p6, p8, p11); // Definition der LCD-Pins |
corsa1600 | 0:6ed0ae055a52 | 21 | |
corsa1600 | 0:6ed0ae055a52 | 22 | //_____________ meine Variablen _________________\\ |
corsa1600 | 0:6ed0ae055a52 | 23 | |
corsa1600 | 0:6ed0ae055a52 | 24 | enum State {ST_AUS=0, ST_EIN}; |
corsa1600 | 0:6ed0ae055a52 | 25 | State state; |
corsa1600 | 0:6ed0ae055a52 | 26 | |
corsa1600 | 0:6ed0ae055a52 | 27 | bool pressed = false; |
corsa1600 | 0:6ed0ae055a52 | 28 | |
corsa1600 | 0:6ed0ae055a52 | 29 | |
corsa1600 | 0:6ed0ae055a52 | 30 | // ______________Led blinken lassen______________\\ |
corsa1600 | 0:6ed0ae055a52 | 31 | |
corsa1600 | 0:6ed0ae055a52 | 32 | void flip() // |
corsa1600 | 0:6ed0ae055a52 | 33 | { |
corsa1600 | 0:6ed0ae055a52 | 34 | blinkCount++; // Variable die hochgezählt wird um die LED 2 mal blinken zu lassen |
corsa1600 | 0:6ed0ae055a52 | 35 | Led4 = !Led4; // umschalten der LED |
corsa1600 | 0:6ed0ae055a52 | 36 | } |
corsa1600 | 0:6ed0ae055a52 | 37 | |
corsa1600 | 0:6ed0ae055a52 | 38 | //************* EREIGNISSE **************** |
corsa1600 | 0:6ed0ae055a52 | 39 | |
corsa1600 | 0:6ed0ae055a52 | 40 | void rise(void) |
corsa1600 | 0:6ed0ae055a52 | 41 | { |
corsa1600 | 0:6ed0ae055a52 | 42 | wait_ms(100); // Entprellung der Taste, bei mir 100ms da der Taster furchtbar prellt... |
corsa1600 | 0:6ed0ae055a52 | 43 | pressed = true; // Umschalten auf WAHR, es wurde gedrückt |
corsa1600 | 0:6ed0ae055a52 | 44 | } |
corsa1600 | 0:6ed0ae055a52 | 45 | |
corsa1600 | 0:6ed0ae055a52 | 46 | bool CheckFlag() |
corsa1600 | 0:6ed0ae055a52 | 47 | { |
corsa1600 | 0:6ed0ae055a52 | 48 | if (pressed) // Abfrage ob pressed WAHR ist |
corsa1600 | 0:6ed0ae055a52 | 49 | { |
corsa1600 | 0:6ed0ae055a52 | 50 | pressed=false; // Rücksetzen wieder auf Status FALSCH |
corsa1600 | 0:6ed0ae055a52 | 51 | return true; // Rückgabe bei CheckFlag das WAHR ist |
corsa1600 | 0:6ed0ae055a52 | 52 | } |
corsa1600 | 0:6ed0ae055a52 | 53 | return false; // Wenn nicht pressed Wahr ist wird CheckFlag als FALSCH zurück gegeben |
corsa1600 | 0:6ed0ae055a52 | 54 | } |
corsa1600 | 0:6ed0ae055a52 | 55 | |
corsa1600 | 0:6ed0ae055a52 | 56 | //************* STATES **************** |
corsa1600 | 0:6ed0ae055a52 | 57 | |
corsa1600 | 0:6ed0ae055a52 | 58 | void ST_Aus (void) |
corsa1600 | 0:6ed0ae055a52 | 59 | { |
corsa1600 | 0:6ed0ae055a52 | 60 | //______________Status auf LCD und Serial_______________\\ |
corsa1600 | 0:6ed0ae055a52 | 61 | lcd.cls(); // löscht lcd (clear screen) |
corsa1600 | 0:6ed0ae055a52 | 62 | lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32) |
corsa1600 | 0:6ed0ae055a52 | 63 | lcd.printf("State: 1 (Aus)"); //Ausgabe am Display |
corsa1600 | 0:6ed0ae055a52 | 64 | printf("State: 1 (Aus)"); // Ausgabe auf der seriellen Console |
corsa1600 | 0:6ed0ae055a52 | 65 | |
corsa1600 | 0:6ed0ae055a52 | 66 | //_______________entry____________________\\ |
corsa1600 | 0:6ed0ae055a52 | 67 | |
corsa1600 | 0:6ed0ae055a52 | 68 | //_______________do_______________________\\ |
corsa1600 | 0:6ed0ae055a52 | 69 | |
corsa1600 | 0:6ed0ae055a52 | 70 | while(true) |
corsa1600 | 0:6ed0ae055a52 | 71 | { |
corsa1600 | 0:6ed0ae055a52 | 72 | Led1 = 0; // Led1 wird auf LOW gesetzt |
corsa1600 | 0:6ed0ae055a52 | 73 | if(CheckFlag()) // Ist CheckFlag WAHR dann |
corsa1600 | 0:6ed0ae055a52 | 74 | { |
corsa1600 | 0:6ed0ae055a52 | 75 | state = ST_EIN; // Wechsel auf Status EIN |
corsa1600 | 0:6ed0ae055a52 | 76 | |
corsa1600 | 0:6ed0ae055a52 | 77 | //______________exit_______________________\\ |
corsa1600 | 0:6ed0ae055a52 | 78 | |
corsa1600 | 0:6ed0ae055a52 | 79 | return; |
corsa1600 | 0:6ed0ae055a52 | 80 | } |
corsa1600 | 0:6ed0ae055a52 | 81 | } |
corsa1600 | 0:6ed0ae055a52 | 82 | } |
corsa1600 | 0:6ed0ae055a52 | 83 | |
corsa1600 | 0:6ed0ae055a52 | 84 | void ST_Ein (void) |
corsa1600 | 0:6ed0ae055a52 | 85 | { |
corsa1600 | 0:6ed0ae055a52 | 86 | //Status auf LCD und Serial |
corsa1600 | 0:6ed0ae055a52 | 87 | lcd.cls(); // löscht lcd (clear screen) |
corsa1600 | 0:6ed0ae055a52 | 88 | lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32) |
corsa1600 | 0:6ed0ae055a52 | 89 | lcd.printf("State: 2 (Ein)"); |
corsa1600 | 0:6ed0ae055a52 | 90 | printf("State: 2 (Ein)"); |
corsa1600 | 0:6ed0ae055a52 | 91 | |
corsa1600 | 0:6ed0ae055a52 | 92 | |
corsa1600 | 0:6ed0ae055a52 | 93 | // aufruf um die Led blinken zu lassen |
corsa1600 | 0:6ed0ae055a52 | 94 | flipper.attach(&flip, 0.3); // the address of the function to be attached (flip) and the interval (2 seconds) |
corsa1600 | 0:6ed0ae055a52 | 95 | |
corsa1600 | 0:6ed0ae055a52 | 96 | while(true) |
corsa1600 | 0:6ed0ae055a52 | 97 | { |
corsa1600 | 0:6ed0ae055a52 | 98 | if ( blinkCount >= 4) break; |
corsa1600 | 0:6ed0ae055a52 | 99 | } |
corsa1600 | 0:6ed0ae055a52 | 100 | flipper.detach(); |
corsa1600 | 0:6ed0ae055a52 | 101 | blinkCount=0; |
corsa1600 | 0:6ed0ae055a52 | 102 | |
corsa1600 | 0:6ed0ae055a52 | 103 | /* |
corsa1600 | 0:6ed0ae055a52 | 104 | // entry |
corsa1600 | 0:6ed0ae055a52 | 105 | Led4 = 1; |
corsa1600 | 0:6ed0ae055a52 | 106 | wait_ms(200); |
corsa1600 | 0:6ed0ae055a52 | 107 | Led4 = 0; |
corsa1600 | 0:6ed0ae055a52 | 108 | wait_ms(200); |
corsa1600 | 0:6ed0ae055a52 | 109 | Led4 = 1; |
corsa1600 | 0:6ed0ae055a52 | 110 | wait_ms(200); |
corsa1600 | 0:6ed0ae055a52 | 111 | Led4 = 0; |
corsa1600 | 0:6ed0ae055a52 | 112 | wait_ms(200); |
corsa1600 | 0:6ed0ae055a52 | 113 | */ |
corsa1600 | 0:6ed0ae055a52 | 114 | // do |
corsa1600 | 0:6ed0ae055a52 | 115 | while(true) { |
corsa1600 | 0:6ed0ae055a52 | 116 | Led1 = 1; |
corsa1600 | 0:6ed0ae055a52 | 117 | |
corsa1600 | 0:6ed0ae055a52 | 118 | if(CheckFlag()) |
corsa1600 | 0:6ed0ae055a52 | 119 | { |
corsa1600 | 0:6ed0ae055a52 | 120 | state = ST_AUS; |
corsa1600 | 0:6ed0ae055a52 | 121 | |
corsa1600 | 0:6ed0ae055a52 | 122 | // exit |
corsa1600 | 0:6ed0ae055a52 | 123 | return; |
corsa1600 | 0:6ed0ae055a52 | 124 | } |
corsa1600 | 0:6ed0ae055a52 | 125 | } |
corsa1600 | 0:6ed0ae055a52 | 126 | } |
corsa1600 | 0:6ed0ae055a52 | 127 | |
corsa1600 | 0:6ed0ae055a52 | 128 | void ST_Error (void) |
corsa1600 | 0:6ed0ae055a52 | 129 | { |
corsa1600 | 0:6ed0ae055a52 | 130 | //Status auf LCD und Serial |
corsa1600 | 0:6ed0ae055a52 | 131 | lcd.cls(); // löscht lcd (clear screen) |
corsa1600 | 0:6ed0ae055a52 | 132 | lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32) |
corsa1600 | 0:6ed0ae055a52 | 133 | lcd.printf("State: ERROR!!!"); |
corsa1600 | 0:6ed0ae055a52 | 134 | printf("State: ERROR!!!"); |
corsa1600 | 0:6ed0ae055a52 | 135 | return; |
corsa1600 | 0:6ed0ae055a52 | 136 | } |
corsa1600 | 0:6ed0ae055a52 | 137 | |
corsa1600 | 0:6ed0ae055a52 | 138 | void stateMachine() |
corsa1600 | 0:6ed0ae055a52 | 139 | { |
corsa1600 | 0:6ed0ae055a52 | 140 | switch (state) |
corsa1600 | 0:6ed0ae055a52 | 141 | { |
corsa1600 | 0:6ed0ae055a52 | 142 | case ST_AUS: ST_Aus(); |
corsa1600 | 0:6ed0ae055a52 | 143 | break; |
corsa1600 | 0:6ed0ae055a52 | 144 | case ST_EIN: ST_Ein(); |
corsa1600 | 0:6ed0ae055a52 | 145 | break; |
corsa1600 | 0:6ed0ae055a52 | 146 | default: ST_Error(); // sollte nicht auftreten :-) |
corsa1600 | 0:6ed0ae055a52 | 147 | break; |
corsa1600 | 0:6ed0ae055a52 | 148 | } |
corsa1600 | 0:6ed0ae055a52 | 149 | } |
corsa1600 | 0:6ed0ae055a52 | 150 | |
corsa1600 | 0:6ed0ae055a52 | 151 | |
corsa1600 | 0:6ed0ae055a52 | 152 | |
corsa1600 | 0:6ed0ae055a52 | 153 | int main() |
corsa1600 | 0:6ed0ae055a52 | 154 | { |
corsa1600 | 0:6ed0ae055a52 | 155 | SW1.rise(&rise); //.fall(&fall); |
corsa1600 | 0:6ed0ae055a52 | 156 | state = ST_AUS; |
corsa1600 | 0:6ed0ae055a52 | 157 | while(true) |
corsa1600 | 0:6ed0ae055a52 | 158 | { |
corsa1600 | 0:6ed0ae055a52 | 159 | stateMachine(); |
corsa1600 | 0:6ed0ae055a52 | 160 | } |
corsa1600 | 0:6ed0ae055a52 | 161 | } |