Franz Paulus
/
TINF_STM_Ampel_20181125
Ampelsteuerung über Timer und manuell weiterschaltbar.
main.cpp
- Committer:
- franzpaulus
- Date:
- 2018-11-25
- Revision:
- 1:e8151ab43b58
- Parent:
- 0:56bf58cdba47
- Child:
- 2:f28f1da2b421
File content as of revision 1:e8151ab43b58:
#include "mbed.h" DigitalOut Led1(LED1); DigitalOut Led2(LED2); DigitalOut Led3(LED3); DigitalOut Led4(LED4); InterruptIn SW1(p14); Timer T1; enum nextState {ST_GREEN, ST_YELLOW, ST_RED, ST_REDYELLOW}; nextState state; bool pressed = false; void rise(void) { wait_ms(20); pressed = true; } bool CheckFlag() { if( pressed ) { pressed = false; return true; } return false; } void ST_Green(){ T1.reset(); while(true) { Led1 = 1; Led2 = 0; Led3 = 0; if(CheckFlag() || T1.read() >= 8) { state = ST_YELLOW; return; } } } void ST_Yellow(void){ T1.reset(); while(true) { Led1 = 0; Led2 = 1; if(CheckFlag() || T1.read() >= 2) { state = ST_RED; return; } } } void ST_Red(void){ T1.reset(); while(true) { Led2 = 0; Led3 = 1; if(CheckFlag() || T1.read() >= 8) { state = ST_REDYELLOW; return; } } } void ST_RedYellow(void){ T1.reset(); while(true) { Led3 = 1; Led2 = 1; if(CheckFlag() || T1.read() >= 2) { state = ST_GREEN; return; } } } void ST_Error(){ while(1) { Led4 = !Led4; wait_ms(200); } } void stateMachine() { switch (state) { case ST_GREEN: ST_Green(); break; case ST_YELLOW: ST_Yellow(); break; case ST_RED: ST_Red(); break; case ST_REDYELLOW: ST_RedYellow(); break; default: ST_Error(); break; } } int main() { printf("Hello STM\n"); T1.start(); SW1.rise(&rise); while(1) { stateMachine(); } }