Philipp Kundegraber
/
TINF_PE_20181025_STM_Schalter
State Maschine Übungen von fPucher https://os.mbed.com/users/fpucher/code/HIM0Board/wiki/STM-Schalter
main.cpp
- Committer:
- kunphil
- Date:
- 2018-11-08
- Revision:
- 1:fdfc2454217b
- Parent:
- 0:7f1867e68546
- Child:
- 2:7dafc3e72a72
File content as of revision 1:fdfc2454217b:
#include "mbed.h" #include "C12832.h" DigitalOut Led1(LED1, 0); DigitalOut Led2(LED2, 0); DigitalOut Led3(LED3, 0); DigitalOut Led4(LED4, 0); InterruptIn SW1(p14); InterruptIn SW2(p15); InterruptIn SW3(p12); InterruptIn SW4(p16); Ticker T1; volatile int blinkCount = 0; //************** LCD **************** C12832 lcd(p5, p7, p6, p8, p11); //************* VARIABLEN **************** enum State {ST_AUS=0, ST_EIN}; State state; bool pressed = false; //************* andere Funktionen **************** void blink() { blinkCount++; Led4 = !Led4; } //************* EREIGNISSE **************** void rise(void) { wait_ms(50); pressed = true; } bool CheckFlag() { if (pressed) { pressed=false; return true; } return false; } //************* STATES **************** void ST_Aus (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: 1 (Aus)"); printf("State: 1 (Aus)"); // entry // do while(true) { Led1 = 0; if(CheckFlag()) { state = ST_EIN; // exit return; } } } void ST_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 T1.attach(&blink, 0.3); while (true) { if(blinkCount >= 4) break; } T1.detach(); blinkCount = 0; // do while(true) { Led1 = 1; if(CheckFlag()) { state = ST_AUS; // exit return; } } } void ST_Error (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: ERROR!!!"); printf("State: ERROR!!!"); return; } void stateMachine() { switch (state) { case ST_AUS: ST_Aus(); break; case ST_EIN: ST_Ein(); break; default: ST_Error(); // sollte nicht auftreten :-) break; } } int main() { SW1.rise(&rise); //.fall(&fall); state = ST_AUS; while(true){ stateMachine(); } }