STM Schalter
Dependencies: mbed C12832 LM75B
Stm_Schalter
https://os.mbed.com/users/mexx/code/info_181024_stm_schalter/
Aufgabe https://os.mbed.com/users/fpucher/code/HIM0Board/wiki/STM-Schalter
iStateMaschine
#include "mbed.h" #include "C12832.h" #include "LM75B.h" // LCD C12832 lcd(p5, p7, p6, p8, p11); // Definition der Pins vom LCD // Temperatur LM75B temp (p27, p28); // Led DigitalOut Led1(LED1); // 1. LED DigitalOut Led2(LED2); // 2. LED DigitalOut Led3(LED3); // 3. LED DigitalOut Led4(LED4); // 4. LED // Joystick InterruptIn Sw4(p13); // LEFT InterruptIn Sw1(p14); // CENTER InterruptIn Sw2(p15); // UP InterruptIn Sw3(p12); // DOWN InterruptIn Sw5(p16); // RIGHT // Prototyping void StateMachine(); //void ST_Error (void); void ST_Ein (void); void ST_Aus (void); //void rise(void); void Sw1Rise(void); void Sw2Rise(void); //bool CheckFlag() ; bool CheckSw1(void); bool CheckSw2(void); void Time (void); void TimeOut(void); void Flip (void); void TempOut (void); void TimeOutError(void); void ErrorBlinken(void); void TimeOver(void); //bool pressed = false; bool volatile Sw1Pressed; bool volatile Sw2Pressed; //***** VARIABLEN ****** enum State {ST_AUS=0, ST_EIN, ST_TimeOut, ST_TempOut, ST_Error}; //State state; State volatile state; Timer getTime; //Timer-Schnittstelle dient zum Erstellen, Starten, Stoppen und Lesen eines Timers Ticker TickFlip;//für blinken der LED //wiederkehrenden Interrupt Timeout resetTime;//Die Timeout-Schnittstelle wird verwendet, um einen Interrupt //einzurichten, um eine Funktion nach einer bestimmten Verzögerung aufzurufen. volatile int counter; // Volatile, damit es nicht auf unterschiedlichen Cores ausgeführt wird int main() { Sw1.rise(&Sw1Rise); //.fall(&fall) Sw2.rise(&Sw2Rise);//warten auf drücken state = ST_AUS; Sw1Pressed = 0; Sw2Pressed = 0; Led1 = 0; Led2 = 0; Led3 = 0; Led4 = 0; counter=0; while(1) { StateMachine(); } } void TimeOver(void) { lcd.cls(); // löscht lcd (clear screen) lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32) lcd.printf("Die Zeit ist abgelaufen"); printf("Die Zeit ist abgelaufen \n"); while(1) {} } void ErrorBlinken(void) ///blineken bei allen fehlern { Led4 = !Led4; } void TimeOutError (void) {///unerwartter fehler state = ST_Error; TickFlip.attach(&ErrorBlinken, 0.3); lcd.cls(); // löscht lcd (clear screen) lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32) lcd.printf("State: ERROR TimeOut"); printf("State: ERROR TimeOut \n"); printf("State: %i \n",state); lcd.cls(); // löscht lcd (clear screen) lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32) lcd.printf("State: %i", state); //Ausgabe am Display } void TempOut(void) {//temp ausgabe lcd.cls(); // löscht lcd (clear screen) lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32) lcd.printf("Temp Out"); printf ("Temp Out \n"); int counterTempOut = 0; while(1) { lcd.cls(); // löscht lcd (clear screen) lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32) lcd.printf("Temp Out"); printf ("Temp Out %f \n", temp.read()); counterTempOut++; wait(1); if(CheckSw2() == true) { state = ST_EIN; return; } } } void TimeOut(void) { lcd.cls(); // löscht lcd (clear screen) lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32) lcd.printf("Time Out"); printf ("TimeOut \n"); int counter2 = 0; while(1) { lcd.cls(); // löscht lcd (clear screen) lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32) lcd.printf("TimeOut %i", counter2); printf ("TimeOut %i \n", counter2); counter2++; wait(1); if(CheckSw2() == true) { state = ST_TempOut; return; } } } void Sw2Rise(void) { lcd.cls(); // löscht lcd (clear screen) lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32) lcd.printf("Sw2Rise"); printf ("Sw2Rise \n"); if(state == ST_EIN || state == ST_TimeOut || state == ST_TempOut) Sw2Pressed = true; // je weleer status schalte weiter wait(0.2); } bool CheckSw2(void) {//Werte true oder false if(Sw2Pressed == true) { lcd.cls(); // löscht lcd (clear screen) lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32) lcd.printf("CheckSw2"); printf ("CheckSw2 \n"); Sw2Pressed = false; return true; } return false; } void Time(void) { lcd.cls(); // löscht lcd (clear screen) lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32) lcd.printf("Time"); printf ("Time \n"); if(getTime.read() == 0) { getTime.start(); //Timer Starten } else { lcd.cls(); // löscht lcd (clear screen) lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32) lcd.printf("Sekunden: %f", getTime.read()); printf("Sekunden: %f \n", getTime.read()); getTime.reset();//Timer löschen } } bool CheckSw1(void) { ////Werte true oder false if(Sw1Pressed == true) { lcd.cls(); // löscht lcd (clear screen) lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32) lcd.printf("CheckSw1"); printf ("CheckSw1 \n"); Time(); //TIME UNTERPROGRAM Sw1Pressed = false; return true; } return false; } void Sw1Rise(void) { lcd.cls(); // löscht lcd (clear screen) lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32) lcd.printf("Sw1Rise"); printf ("Sw1Rise \n"); if(state == ST_EIN || state == ST_AUS) { // wenn Taste getrückt wird wechsel je welcher status Sw1Pressed = true;// Umschalten auf WAHR, es wurde gedrückt wait_ms(200); }// Entprellung der Taste, bei mir 100ms da der Taster furchtbar prellt... } void Ein (void) { //Status auf LCD und Serial lcd.cls(); // löscht lcd (clear screen) lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32) lcd.printf("State: 2 (Ein)"); printf("State: 2 (Ein)"); // entry // aufruf um die Led blinken zu lassen TickFlip.attach(&Flip, 0.5);// the address of the function to be attached (Flip) and the interval (2 seconds) resetTime.attach(&TimeOutError, 10);//time out starten Led1 = true; //led ein while(1) { if(state == ST_Error) { lcd.cls(); // löscht lcd (clear screen) lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32) lcd.printf("State: 2 (Ein)verlassen"); printf("State: 2 (Ein) verlassen"); Led1 = false; // exit return; } if(CheckSw2() == true) { state = ST_TimeOut; // state timeOut resetTime.detach(); // timeout rücksetzen // exit return; } if(CheckSw1() == true) { state = ST_AUS;// state aus Led1 = false; resetTime.detach();// timeout rücksetzen // exit return; } } } void Flip (void) //MIT TICKER 2X blinken { lcd.cls(); // löscht lcd (clear screen) lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32) lcd.printf("Flip"); printf ("Flip \n"); Led4 = !Led4;// umschalten der LED if (counter == 3) { TickFlip.detach();//ticker stopp counter = 0; } else counter++;// Variable die hochgezählt wird um die LED 2 mal blinken zu lassen } void Aus (void)//10s timerout starten { resetTime.attach(&TimeOutError, 10); lcd.cls(); // löscht lcd (clear screen) lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32) lcd.printf("State: 1 (Aus)"); //Ausgabe am Display printf("State: 1 (Aus)\n"); // Ausgabe auf der seriellen Console while(true) { if(state == ST_Error) { printf("ERROR State AUS verlassen /n"); lcd.cls(); // löscht lcd (clear screen) lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32) lcd.printf("ERROR State AUS verlassen"); //Ausgabe am Display return; } if(CheckSw1() == true) { //wenn sw1 gedrückt state = ST_EIN; resetTime.detach(); // timerout wieder stoppen return; } } } void StateMachine() //mit den ganzen möglichen Statuse { switch (state) { case ST_AUS: Aus() ;break; case ST_EIN: Ein() ;break; case ST_TimeOut: TimeOut() ;break; case ST_TempOut: TempOut() ;break; case ST_Error: TimeOver() ;break; default: printf("ERROR") ; lcd.cls() ; // löscht lcd (clear screen) lcd.locate(0,0) ; // x-position, y-position (x: 0-128; y: 0-32) lcd.printf("ERROR") ;break; //Ausgabe am Display } }
main.cpp@3:972b50928bd6, 2018-11-27 (annotated)
- Committer:
- mexx
- Date:
- Tue Nov 27 17:45:43 2018 +0000
- Revision:
- 3:972b50928bd6
- Parent:
- 2:245d5008b630
- Child:
- 4:2a67507b5ee1
27.11.2018
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mexx | 0:d68d7d2fd930 | 1 | #include "mbed.h" |
mexx | 0:d68d7d2fd930 | 2 | #include "C12832.h" |
mexx | 3:972b50928bd6 | 3 | #include "LM75B.h" |
mexx | 0:d68d7d2fd930 | 4 | |
mexx | 3:972b50928bd6 | 5 | // LCD |
mexx | 3:972b50928bd6 | 6 | C12832 lcd(p5, p7, p6, p8, p11); // Definition der Pins vom LCD |
mexx | 3:972b50928bd6 | 7 | // Temperatur |
mexx | 3:972b50928bd6 | 8 | LM75B temp (p27, p28); |
mexx | 3:972b50928bd6 | 9 | // Led |
mexx | 3:972b50928bd6 | 10 | DigitalOut Led1(LED1); // 1. LED |
mexx | 3:972b50928bd6 | 11 | DigitalOut Led2(LED2); // 2. LED |
mexx | 3:972b50928bd6 | 12 | DigitalOut Led3(LED3); // 3. LED |
mexx | 3:972b50928bd6 | 13 | DigitalOut Led4(LED4); // 4. LED |
mexx | 3:972b50928bd6 | 14 | // Joystick |
mexx | 3:972b50928bd6 | 15 | InterruptIn Sw4(p13); // LEFT |
mexx | 3:972b50928bd6 | 16 | InterruptIn Sw1(p14); // CENTER |
mexx | 3:972b50928bd6 | 17 | InterruptIn Sw2(p15); // UP |
mexx | 3:972b50928bd6 | 18 | InterruptIn Sw3(p12); // DOWN |
mexx | 3:972b50928bd6 | 19 | InterruptIn Sw5(p16); // RIGHT |
mexx | 0:d68d7d2fd930 | 20 | |
mexx | 1:765c9174d9a6 | 21 | |
mexx | 3:972b50928bd6 | 22 | // Prototyping |
mexx | 3:972b50928bd6 | 23 | void StateMachine(); |
mexx | 3:972b50928bd6 | 24 | //void ST_Error (void); |
mexx | 1:765c9174d9a6 | 25 | void ST_Ein (void); |
mexx | 1:765c9174d9a6 | 26 | void ST_Aus (void); |
mexx | 3:972b50928bd6 | 27 | //void rise(void); |
mexx | 3:972b50928bd6 | 28 | void Sw1Rise(void); |
mexx | 3:972b50928bd6 | 29 | void Sw2Rise(void); |
mexx | 1:765c9174d9a6 | 30 | //bool CheckFlag() ; |
mexx | 1:765c9174d9a6 | 31 | bool CheckSw1(void); |
mexx | 1:765c9174d9a6 | 32 | bool CheckSw2(void); |
mexx | 3:972b50928bd6 | 33 | void Time (void); |
mexx | 3:972b50928bd6 | 34 | void TimeOut(void); |
mexx | 3:972b50928bd6 | 35 | void Flip (void); |
mexx | 3:972b50928bd6 | 36 | void TempOut (void); |
mexx | 3:972b50928bd6 | 37 | void TimeOutError(void); |
mexx | 3:972b50928bd6 | 38 | void ErrorBlinken(void); |
mexx | 3:972b50928bd6 | 39 | void TimeOver(void); |
mexx | 3:972b50928bd6 | 40 | |
mexx | 1:765c9174d9a6 | 41 | |
mexx | 1:765c9174d9a6 | 42 | //bool pressed = false; |
mexx | 3:972b50928bd6 | 43 | bool volatile Sw1Pressed; |
mexx | 3:972b50928bd6 | 44 | bool volatile Sw2Pressed; |
mexx | 1:765c9174d9a6 | 45 | |
mexx | 0:d68d7d2fd930 | 46 | //***** VARIABLEN ****** |
mexx | 0:d68d7d2fd930 | 47 | |
mexx | 3:972b50928bd6 | 48 | enum State {ST_AUS=0, ST_EIN, ST_TimeOut, ST_TempOut, ST_Error}; |
mexx | 1:765c9174d9a6 | 49 | //State state; |
mexx | 1:765c9174d9a6 | 50 | State volatile state; |
mexx | 3:972b50928bd6 | 51 | Timer getTime; |
mexx | 3:972b50928bd6 | 52 | Ticker TickFlip;//für blinken der LED |
mexx | 3:972b50928bd6 | 53 | Timeout resetTime; |
mexx | 3:972b50928bd6 | 54 | volatile int counter; // Volatile, damit es nicht auf unterschiedlichen Cores ausgeführt wird |
mexx | 0:d68d7d2fd930 | 55 | |
mexx | 0:d68d7d2fd930 | 56 | |
mexx | 1:765c9174d9a6 | 57 | |
mexx | 1:765c9174d9a6 | 58 | int main() |
mexx | 1:765c9174d9a6 | 59 | { |
mexx | 3:972b50928bd6 | 60 | |
mexx | 3:972b50928bd6 | 61 | Sw1.rise(&Sw1Rise); //.fall(&fall) |
mexx | 3:972b50928bd6 | 62 | Sw2.rise(&Sw2Rise);//warten auf drücken |
mexx | 1:765c9174d9a6 | 63 | state = ST_AUS; |
mexx | 3:972b50928bd6 | 64 | Sw1Pressed = 0; |
mexx | 3:972b50928bd6 | 65 | Sw2Pressed = 0; |
mexx | 3:972b50928bd6 | 66 | Led1 = 0; |
mexx | 3:972b50928bd6 | 67 | Led2 = 0; |
mexx | 3:972b50928bd6 | 68 | Led3 = 0; |
mexx | 3:972b50928bd6 | 69 | Led4 = 0; |
mexx | 3:972b50928bd6 | 70 | counter=0; |
mexx | 0:d68d7d2fd930 | 71 | |
mexx | 3:972b50928bd6 | 72 | while(1) |
mexx | 1:765c9174d9a6 | 73 | { |
mexx | 3:972b50928bd6 | 74 | |
mexx | 3:972b50928bd6 | 75 | StateMachine(); |
mexx | 1:765c9174d9a6 | 76 | } |
mexx | 0:d68d7d2fd930 | 77 | } |
mexx | 0:d68d7d2fd930 | 78 | |
mexx | 3:972b50928bd6 | 79 | void TimeOver(void) |
mexx | 0:d68d7d2fd930 | 80 | { |
mexx | 3:972b50928bd6 | 81 | lcd.cls(); // löscht lcd (clear screen) |
mexx | 3:972b50928bd6 | 82 | lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32) |
mexx | 3:972b50928bd6 | 83 | lcd.printf("Die Zeit ist abgelaufen"); |
mexx | 3:972b50928bd6 | 84 | printf("Die Zeit ist abgelaufen \n"); |
mexx | 3:972b50928bd6 | 85 | while(1) |
mexx | 3:972b50928bd6 | 86 | {} |
mexx | 0:d68d7d2fd930 | 87 | } |
mexx | 0:d68d7d2fd930 | 88 | |
mexx | 3:972b50928bd6 | 89 | void ErrorBlinken(void) |
mexx | 3:972b50928bd6 | 90 | { |
mexx | 3:972b50928bd6 | 91 | Led4 = !Led4; |
mexx | 3:972b50928bd6 | 92 | } |
mexx | 2:245d5008b630 | 93 | |
mexx | 3:972b50928bd6 | 94 | void TimeOutError (void) { |
mexx | 3:972b50928bd6 | 95 | state = ST_Error; |
mexx | 3:972b50928bd6 | 96 | TickFlip.attach(&ErrorBlinken, 0.3); |
mexx | 3:972b50928bd6 | 97 | lcd.cls(); // löscht lcd (clear screen) |
mexx | 3:972b50928bd6 | 98 | lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32) |
mexx | 3:972b50928bd6 | 99 | lcd.printf("State: ERROR TimeOut"); |
mexx | 3:972b50928bd6 | 100 | printf("State: ERROR TimeOut \n"); |
mexx | 3:972b50928bd6 | 101 | |
mexx | 3:972b50928bd6 | 102 | printf("State: %i \n",state); |
mexx | 3:972b50928bd6 | 103 | lcd.cls(); // löscht lcd (clear screen) |
mexx | 3:972b50928bd6 | 104 | lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32) |
mexx | 3:972b50928bd6 | 105 | lcd.printf("State: %i", state); //Ausgabe am Display |
mexx | 3:972b50928bd6 | 106 | } |
mexx | 3:972b50928bd6 | 107 | |
mexx | 3:972b50928bd6 | 108 | void TempOut(void) { |
mexx | 3:972b50928bd6 | 109 | lcd.cls(); // löscht lcd (clear screen) |
mexx | 3:972b50928bd6 | 110 | lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32) |
mexx | 3:972b50928bd6 | 111 | lcd.printf("Temp Out"); |
mexx | 3:972b50928bd6 | 112 | printf ("Temp Out \n"); |
mexx | 3:972b50928bd6 | 113 | int counterTempOut = 0; |
mexx | 3:972b50928bd6 | 114 | while(1) { |
mexx | 3:972b50928bd6 | 115 | lcd.cls(); // löscht lcd (clear screen) |
mexx | 3:972b50928bd6 | 116 | lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32) |
mexx | 3:972b50928bd6 | 117 | lcd.printf("Temp Out"); |
mexx | 3:972b50928bd6 | 118 | printf ("Temp Out %f \n", temp.read()); |
mexx | 3:972b50928bd6 | 119 | counterTempOut++; |
mexx | 3:972b50928bd6 | 120 | wait(1); |
mexx | 3:972b50928bd6 | 121 | |
mexx | 3:972b50928bd6 | 122 | if(CheckSw2() == true) { |
mexx | 3:972b50928bd6 | 123 | state = ST_EIN; |
mexx | 3:972b50928bd6 | 124 | return; |
mexx | 3:972b50928bd6 | 125 | } |
mexx | 3:972b50928bd6 | 126 | } |
mexx | 3:972b50928bd6 | 127 | } |
mexx | 3:972b50928bd6 | 128 | |
mexx | 3:972b50928bd6 | 129 | void TimeOut(void) { |
mexx | 3:972b50928bd6 | 130 | lcd.cls(); // löscht lcd (clear screen) |
mexx | 3:972b50928bd6 | 131 | lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32) |
mexx | 3:972b50928bd6 | 132 | lcd.printf("Time Out"); |
mexx | 3:972b50928bd6 | 133 | printf ("TimeOut \n"); |
mexx | 3:972b50928bd6 | 134 | int counter2 = 0; |
mexx | 3:972b50928bd6 | 135 | while(1) { |
mexx | 3:972b50928bd6 | 136 | lcd.cls(); // löscht lcd (clear screen) |
mexx | 3:972b50928bd6 | 137 | lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32) |
mexx | 3:972b50928bd6 | 138 | lcd.printf("TimeOut %i", counter2); |
mexx | 3:972b50928bd6 | 139 | printf ("TimeOut %i \n", counter2); |
mexx | 3:972b50928bd6 | 140 | counter2++; |
mexx | 3:972b50928bd6 | 141 | wait(1); |
mexx | 3:972b50928bd6 | 142 | if(CheckSw2() == true) { |
mexx | 3:972b50928bd6 | 143 | state = ST_TempOut; |
mexx | 3:972b50928bd6 | 144 | return; |
mexx | 3:972b50928bd6 | 145 | } |
mexx | 3:972b50928bd6 | 146 | } |
mexx | 3:972b50928bd6 | 147 | } |
mexx | 2:245d5008b630 | 148 | |
mexx | 3:972b50928bd6 | 149 | void Sw2Rise(void) { |
mexx | 3:972b50928bd6 | 150 | lcd.cls(); // löscht lcd (clear screen) |
mexx | 3:972b50928bd6 | 151 | lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32) |
mexx | 3:972b50928bd6 | 152 | lcd.printf("Sw2Rise"); |
mexx | 3:972b50928bd6 | 153 | printf ("Sw2Rise \n"); |
mexx | 3:972b50928bd6 | 154 | if(state == ST_EIN || state == ST_TimeOut || state == ST_TempOut) |
mexx | 3:972b50928bd6 | 155 | Sw2Pressed = true; |
mexx | 3:972b50928bd6 | 156 | wait(0.2); |
mexx | 3:972b50928bd6 | 157 | } |
mexx | 3:972b50928bd6 | 158 | |
mexx | 3:972b50928bd6 | 159 | bool CheckSw2(void) { |
mexx | 3:972b50928bd6 | 160 | if(Sw2Pressed == true) { |
mexx | 3:972b50928bd6 | 161 | lcd.cls(); // löscht lcd (clear screen) |
mexx | 3:972b50928bd6 | 162 | lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32) |
mexx | 3:972b50928bd6 | 163 | lcd.printf("CheckSw2"); |
mexx | 3:972b50928bd6 | 164 | printf ("CheckSw2 \n"); |
mexx | 3:972b50928bd6 | 165 | Sw2Pressed = false; |
mexx | 3:972b50928bd6 | 166 | return true; |
mexx | 3:972b50928bd6 | 167 | } |
mexx | 3:972b50928bd6 | 168 | |
mexx | 3:972b50928bd6 | 169 | return false; |
mexx | 3:972b50928bd6 | 170 | } |
mexx | 3:972b50928bd6 | 171 | |
mexx | 3:972b50928bd6 | 172 | void Time(void) { |
mexx | 3:972b50928bd6 | 173 | lcd.cls(); // löscht lcd (clear screen) |
mexx | 3:972b50928bd6 | 174 | lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32) |
mexx | 3:972b50928bd6 | 175 | lcd.printf("Time"); |
mexx | 3:972b50928bd6 | 176 | printf ("Time \n"); |
mexx | 3:972b50928bd6 | 177 | if(getTime.read() == 0) |
mexx | 3:972b50928bd6 | 178 | { |
mexx | 3:972b50928bd6 | 179 | getTime.start(); //Timer Starten |
mexx | 3:972b50928bd6 | 180 | } |
mexx | 3:972b50928bd6 | 181 | else { |
mexx | 3:972b50928bd6 | 182 | lcd.cls(); // löscht lcd (clear screen) |
mexx | 3:972b50928bd6 | 183 | lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32) |
mexx | 3:972b50928bd6 | 184 | lcd.printf("Sekunden: %f", getTime.read()); |
mexx | 3:972b50928bd6 | 185 | printf("Sekunden: %f \n", getTime.read()); |
mexx | 3:972b50928bd6 | 186 | getTime.reset(); |
mexx | 3:972b50928bd6 | 187 | } |
mexx | 3:972b50928bd6 | 188 | } |
mexx | 3:972b50928bd6 | 189 | |
mexx | 3:972b50928bd6 | 190 | bool CheckSw1(void) { |
mexx | 3:972b50928bd6 | 191 | if(Sw1Pressed == true) { |
mexx | 3:972b50928bd6 | 192 | lcd.cls(); // löscht lcd (clear screen) |
mexx | 3:972b50928bd6 | 193 | lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32) |
mexx | 3:972b50928bd6 | 194 | lcd.printf("CheckSw1"); |
mexx | 3:972b50928bd6 | 195 | printf ("CheckSw1 \n"); |
mexx | 3:972b50928bd6 | 196 | Time(); //TIME UNTERPROGRAM |
mexx | 3:972b50928bd6 | 197 | Sw1Pressed = false; |
mexx | 3:972b50928bd6 | 198 | return true; |
mexx | 3:972b50928bd6 | 199 | } |
mexx | 3:972b50928bd6 | 200 | |
mexx | 3:972b50928bd6 | 201 | return false; |
mexx | 3:972b50928bd6 | 202 | } |
mexx | 3:972b50928bd6 | 203 | |
mexx | 3:972b50928bd6 | 204 | void Sw1Rise(void) { |
mexx | 3:972b50928bd6 | 205 | lcd.cls(); // löscht lcd (clear screen) |
mexx | 3:972b50928bd6 | 206 | lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32) |
mexx | 3:972b50928bd6 | 207 | lcd.printf("Sw1Rise"); |
mexx | 3:972b50928bd6 | 208 | printf ("Sw1Rise \n"); |
mexx | 3:972b50928bd6 | 209 | if(state == ST_EIN || state == ST_AUS) { |
mexx | 3:972b50928bd6 | 210 | Sw1Pressed = true;// Umschalten auf WAHR, es wurde gedrückt |
mexx | 3:972b50928bd6 | 211 | wait_ms(200); |
mexx | 3:972b50928bd6 | 212 | }// Entprellung der Taste, bei mir 100ms da der Taster furchtbar prellt... |
mexx | 3:972b50928bd6 | 213 | } |
mexx | 3:972b50928bd6 | 214 | |
mexx | 3:972b50928bd6 | 215 | void Ein (void) |
mexx | 0:d68d7d2fd930 | 216 | { |
mexx | 2:245d5008b630 | 217 | //Status auf LCD und Serial |
mexx | 0:d68d7d2fd930 | 218 | lcd.cls(); // löscht lcd (clear screen) |
mexx | 0:d68d7d2fd930 | 219 | lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32) |
mexx | 0:d68d7d2fd930 | 220 | lcd.printf("State: 2 (Ein)"); |
mexx | 2:245d5008b630 | 221 | printf("State: 2 (Ein)"); |
mexx | 3:972b50928bd6 | 222 | |
mexx | 3:972b50928bd6 | 223 | // entry |
mexx | 3:972b50928bd6 | 224 | |
mexx | 3:972b50928bd6 | 225 | // aufruf um die Led blinken zu lassen |
mexx | 3:972b50928bd6 | 226 | TickFlip.attach(&Flip, 0.5);// the address of the function to be attached (Flip) and the interval (2 seconds) |
mexx | 3:972b50928bd6 | 227 | resetTime.attach(&TimeOutError, 10); |
mexx | 3:972b50928bd6 | 228 | Led1 = true; |
mexx | 3:972b50928bd6 | 229 | |
mexx | 1:765c9174d9a6 | 230 | while(1) { |
mexx | 0:d68d7d2fd930 | 231 | |
mexx | 3:972b50928bd6 | 232 | if(state == ST_Error) { |
mexx | 3:972b50928bd6 | 233 | lcd.cls(); // löscht lcd (clear screen) |
mexx | 3:972b50928bd6 | 234 | lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32) |
mexx | 3:972b50928bd6 | 235 | lcd.printf("State: 2 (Ein)verlassen"); |
mexx | 3:972b50928bd6 | 236 | printf("State: 2 (Ein) verlassen"); |
mexx | 3:972b50928bd6 | 237 | Led1 = false; |
mexx | 3:972b50928bd6 | 238 | // exit |
mexx | 3:972b50928bd6 | 239 | return; |
mexx | 1:765c9174d9a6 | 240 | } |
mexx | 3:972b50928bd6 | 241 | |
mexx | 2:245d5008b630 | 242 | |
mexx | 3:972b50928bd6 | 243 | if(CheckSw2() == true) { |
mexx | 3:972b50928bd6 | 244 | state = ST_TimeOut; |
mexx | 3:972b50928bd6 | 245 | resetTime.detach(); |
mexx | 3:972b50928bd6 | 246 | // exit |
mexx | 3:972b50928bd6 | 247 | return; |
mexx | 3:972b50928bd6 | 248 | } |
mexx | 3:972b50928bd6 | 249 | if(CheckSw1() == true) { |
mexx | 3:972b50928bd6 | 250 | state = ST_AUS; |
mexx | 3:972b50928bd6 | 251 | Led1 = false; |
mexx | 3:972b50928bd6 | 252 | resetTime.detach(); |
mexx | 3:972b50928bd6 | 253 | // exit |
mexx | 3:972b50928bd6 | 254 | return; |
mexx | 3:972b50928bd6 | 255 | } |
mexx | 0:d68d7d2fd930 | 256 | } |
mexx | 0:d68d7d2fd930 | 257 | } |
mexx | 0:d68d7d2fd930 | 258 | |
mexx | 3:972b50928bd6 | 259 | void Flip (void) |
mexx | 3:972b50928bd6 | 260 | { |
mexx | 3:972b50928bd6 | 261 | lcd.cls(); // löscht lcd (clear screen) |
mexx | 3:972b50928bd6 | 262 | lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32) |
mexx | 3:972b50928bd6 | 263 | lcd.printf("Flip"); |
mexx | 3:972b50928bd6 | 264 | printf ("Flip \n"); |
mexx | 3:972b50928bd6 | 265 | |
mexx | 3:972b50928bd6 | 266 | Led4 = !Led4;// umschalten der LED |
mexx | 3:972b50928bd6 | 267 | |
mexx | 3:972b50928bd6 | 268 | if (counter == 3) { |
mexx | 3:972b50928bd6 | 269 | TickFlip.detach(); |
mexx | 3:972b50928bd6 | 270 | counter = 0; |
mexx | 3:972b50928bd6 | 271 | } |
mexx | 3:972b50928bd6 | 272 | else |
mexx | 3:972b50928bd6 | 273 | counter++;// Variable die hochgezählt wird um die LED 2 mal blinken zu lassen |
mexx | 3:972b50928bd6 | 274 | } |
mexx | 0:d68d7d2fd930 | 275 | |
mexx | 3:972b50928bd6 | 276 | void Aus (void) |
mexx | 3:972b50928bd6 | 277 | { |
mexx | 3:972b50928bd6 | 278 | resetTime.attach(&TimeOutError, 10); |
mexx | 3:972b50928bd6 | 279 | lcd.cls(); // löscht lcd (clear screen) |
mexx | 3:972b50928bd6 | 280 | lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32) |
mexx | 3:972b50928bd6 | 281 | lcd.printf("State: 1 (Aus)"); //Ausgabe am Display |
mexx | 3:972b50928bd6 | 282 | printf("State: 1 (Aus)\n"); // Ausgabe auf der seriellen Console |
mexx | 1:765c9174d9a6 | 283 | |
mexx | 3:972b50928bd6 | 284 | while(true) { |
mexx | 3:972b50928bd6 | 285 | if(state == ST_Error) { |
mexx | 3:972b50928bd6 | 286 | printf("ERROR State AUS verlassen /n"); |
mexx | 3:972b50928bd6 | 287 | lcd.cls(); // löscht lcd (clear screen) |
mexx | 3:972b50928bd6 | 288 | lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32) |
mexx | 3:972b50928bd6 | 289 | lcd.printf("ERROR State AUS verlassen"); //Ausgabe am Display |
mexx | 3:972b50928bd6 | 290 | return; |
mexx | 3:972b50928bd6 | 291 | } |
mexx | 3:972b50928bd6 | 292 | |
mexx | 3:972b50928bd6 | 293 | if(CheckSw1() == true) { |
mexx | 3:972b50928bd6 | 294 | state = ST_EIN; |
mexx | 3:972b50928bd6 | 295 | resetTime.detach(); |
mexx | 3:972b50928bd6 | 296 | return; |
mexx | 3:972b50928bd6 | 297 | } |
mexx | 3:972b50928bd6 | 298 | |
mexx | 3:972b50928bd6 | 299 | } |
mexx | 3:972b50928bd6 | 300 | } |
mexx | 3:972b50928bd6 | 301 | void StateMachine() |
mexx | 0:d68d7d2fd930 | 302 | { |
mexx | 3:972b50928bd6 | 303 | switch (state) |
mexx | 3:972b50928bd6 | 304 | { |
mexx | 3:972b50928bd6 | 305 | case ST_AUS: Aus() ;break; |
mexx | 3:972b50928bd6 | 306 | case ST_EIN: Ein() ;break; |
mexx | 3:972b50928bd6 | 307 | case ST_TimeOut: TimeOut() ;break; |
mexx | 3:972b50928bd6 | 308 | case ST_TempOut: TempOut() ;break; |
mexx | 3:972b50928bd6 | 309 | case ST_Error: TimeOver() ;break; |
mexx | 3:972b50928bd6 | 310 | default: printf("ERROR") ; |
mexx | 3:972b50928bd6 | 311 | lcd.cls() ; // löscht lcd (clear screen) |
mexx | 3:972b50928bd6 | 312 | lcd.locate(0,0) ; // x-position, y-position (x: 0-128; y: 0-32) |
mexx | 3:972b50928bd6 | 313 | lcd.printf("ERROR") ;break; //Ausgabe am Display |
mexx | 3:972b50928bd6 | 314 | } |
mexx | 1:765c9174d9a6 | 315 | } |
mexx | 1:765c9174d9a6 | 316 | |
mexx | 1:765c9174d9a6 | 317 | |
mexx | 1:765c9174d9a6 | 318 | |
mexx | 1:765c9174d9a6 | 319 | |
mexx | 1:765c9174d9a6 | 320 | |
mexx | 1:765c9174d9a6 | 321 | |
mexx | 3:972b50928bd6 | 322 | |
mexx | 3:972b50928bd6 | 323 | |
mexx | 3:972b50928bd6 | 324 | |
mexx | 3:972b50928bd6 | 325 | |
mexx | 3:972b50928bd6 | 326 | |
mexx | 3:972b50928bd6 | 327 | |
mexx | 3:972b50928bd6 | 328 | |
mexx | 3:972b50928bd6 | 329 | |
mexx | 3:972b50928bd6 | 330 | |
mexx | 3:972b50928bd6 | 331 | |
mexx | 3:972b50928bd6 | 332 | |
mexx | 3:972b50928bd6 | 333 | |
mexx | 3:972b50928bd6 | 334 | |
mexx | 3:972b50928bd6 | 335 | |
mexx | 3:972b50928bd6 | 336 | |
mexx | 3:972b50928bd6 | 337 | |
mexx | 3:972b50928bd6 | 338 | |
mexx | 3:972b50928bd6 | 339 | |
mexx | 3:972b50928bd6 | 340 | |
mexx | 3:972b50928bd6 | 341 | |
mexx | 3:972b50928bd6 | 342 | |
mexx | 3:972b50928bd6 | 343 |