Domenic Ferlin
/
Statemachineimplementierung
Ein kleines Programm zum verinnerlichen der Statemachine.
Revision 0:a2de8a5a01a0, committed 2018-11-15
- Comitter:
- domenicf
- Date:
- Thu Nov 15 17:06:08 2018 +0000
- Commit message:
- Tinf Beispiele
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
mbed.bld | Show annotated file Show diff for this revision Revisions of this file |
diff -r 000000000000 -r a2de8a5a01a0 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu Nov 15 17:06:08 2018 +0000 @@ -0,0 +1,235 @@ +#include "mbed.h" + + +LM75B tmp(p28, p27); + +DigitalOut led1(LED1); +DigitalOut led2(LED2); +DigitalOut led3(LED3); +DigitalOut led4(LED4); + +InterruptIn sw1(p14); +InterruptIn sw2(p15); + +void flipper(void); +void ON(void); +void IDLE(void); +void sw1Rise(void); +void sw2Rise(void); +void Time(void); +void TimeOut(void); +void Blink(void); +void tempOut(void); +void timeOutError(void); +void errorBlink(void); +void timeover(void); +bool checker(void); +bool checkerSW2(void); +bool volatile sw2Pressed; +bool volatile sw1Pressed; + +Timeout removeTime; +Timer gettime; +Ticker tickerflipper; +int counter; + +enum Status{ST_IDLE=0, ST_ON, ST_TimeOut, ST_TempOut, ST_Error}; +Status volatile status; + +int main(void) +{ + sw1.rise(&sw1Rise); + sw2.rise(&sw2Rise); + status = ST_IDLE; + sw1Pressed = 0; + sw2Pressed = 0; + counter=0; + led1=0, led2=0, led3=0, led4=0; + + while(1) + { + switch(status) + { + case ST_IDLE:IDLE() ; break; + case ST_ON:ON() ; break; + case ST_TimeOut:TimeOut() ; break; + case ST_TempOut:tempOut() ; break; + case ST_Error:timeover() ; break; + } + } +} + +void timeover(void) +{ + printf("Ende gut, Alles gut\n"); + while(1) + {} +} + +void errorBlink(void) +{ + led4 = !led4; + +} +void timeOutError(void) +{ + status = ST_Error; + printf("Error TimeOut\n"); + printf("Status: %i\n", status); +} + +void tempOut(void) +{ + int countertmp = 0; + + printf("void tempOut\n"); + while(1) + { + printf("Temperatur: %f\n",tmp.read()); + if(checkerSW2() == true) + { + status = ST_ON; + return; + } + countertmp++; + wait(1); + } +} + +void flipper(void) +{ + printf("void flipper\n"); + led4 = !led4; + if(counter == 3) + { + tickerflipper.detach(); + counter=0; + } + else + counter++; +} + +void TimeOut(void) +{ + printf("void TimeOut\n"); + int counterto = 0; + while(1) + { + printf("TimeOut: %i\n", counterto); + counterto++; + wait(1); + + if(checkerSW2() == true) + { + status = ST_TempOut; + return; + } + } +} + +void Time(void) +{ + printf("void Time\n"); + if (gettime.read() ==0) + { + gettime.start(); + } + + else + printf("Secunden: %f\n", gettime.read()); + gettime.reset(); +} + +bool checker(void) +{ + if(sw1Pressed == true) + { + printf("void checker\n"); + Time(); + sw1Pressed = false; + return true; + } + return false; +} + +bool checkerSW2(void) +{ + if(sw2Pressed == true) + { + printf("void checkerSW2\n"); + sw2Pressed = false; + return true; + } + return false; +} + + +void sw1Rise(void) +{ + printf("sw1Rise\n"); + + if(status == ST_ON || status == ST_IDLE) sw1Pressed = 1; + wait_ms(200); +} + +void sw2Rise(void) +{ + printf("void sw2Rise\n"); + if(status == ST_ON || status == ST_TimeOut || status == ST_TempOut) sw2Pressed = 1; + wait_ms(200); +} + +void ON(void) +{ + printf("void ON\n"); + tickerflipper.attach(&flipper, 0.5); + removeTime.attach(&timeOutError, 10); + led1 = true; + + while(1) + { + if(status == ST_Error) + { + printf("IDLE verlassen\n"); + tickerflipper.attach(&errorBlink, 0.3); + led1=false; + return; + } + if(checkerSW2() == true) + { + status = ST_TimeOut; + removeTime.detach(); + return; + } + if (checker() == true) + { + status = ST_IDLE; + removeTime.detach(); + led1=false; + return; + } + } +} + +void IDLE(void) +{ + printf("void IDLE\n"); + removeTime.attach(&timeOutError, 10); + while(1) + { + if(status == ST_Error) + { + printf("IDLE verlassen\n"); + tickerflipper.attach(&errorBlink, 0.3); + led1=false; + return; + } + if (checker() == true) + { + status = ST_ON; + removeTime.detach(); + return; + } + + } +}
diff -r 000000000000 -r a2de8a5a01a0 mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Thu Nov 15 17:06:08 2018 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/mbed_official/code/mbed/builds/e95d10626187 \ No newline at end of file