Mein 1. Versuch

Dependencies:   C12832 mbed

Committer:
corsa1600
Date:
Thu Nov 08 18:32:28 2018 +0000
Revision:
0:6ed0ae055a52
Erster Versuch der STM

Who changed what in which revision?

UserRevisionLine numberNew 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 }