Franz Paulus
/
TINF_STM_Ampel_20181125
Ampelsteuerung über Timer und manuell weiterschaltbar.
Diff: main.cpp
- Revision:
- 0:56bf58cdba47
- Child:
- 1:e8151ab43b58
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu Nov 08 18:27:24 2018 +0000 @@ -0,0 +1,75 @@ +#include "mbed.h" + +DigitalOut Led1(LED1); +DigitalOut Led2(LED2); +DigitalOut Led3(LED3); +DigitalOut Led4(LED4); +InterruptIn SW1(p14); + +enum nextState {ST_EIN=0, ST_AUS, ST_STATE2, ST_STATE3}; +nextState state; + +bool pressed = false; + +void fall(void) { + wait_ms(20); + pressed = true; +} + +bool CheckFlag() +{ + if( pressed ) { + pressed=false; + return true; + } + return false; +} + +void ST_Ein(){ + while(true) { + Led1 = 1; + if(CheckFlag()) { + state = ST_AUS; + return; + } + } +} + +void ST_Aus(void){ + while(true) { + Led1 = 0; + if(CheckFlag()) { + state = ST_EIN; + return; + } + } +} + +void ST_Error(){ + while(1) { + Led3 = !Led3; + wait_ms(200); + } +} + +void stateMachine() +{ + switch (state) + { + case ST_EIN: ST_Ein(); + break; + case ST_AUS: ST_Aus(); + break; + default: ST_Error(); + break; + } +} + +int main() +{ + printf("Hello STM\n"); + SW1.fall(&fall); //.rise(&rise); + while(1) { + stateMachine(); + } +}