![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Ampelsteuerung über Timer und manuell weiterschaltbar.
main.cpp@2:f28f1da2b421, 2018-11-25 (annotated)
- Committer:
- franzpaulus
- Date:
- Sun Nov 25 20:05:44 2018 +0000
- Revision:
- 2:f28f1da2b421
- Parent:
- 1:e8151ab43b58
Ampelsteuerung ?ber Timer und manuell weiterschaltbar. V1.1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
franzpaulus | 0:56bf58cdba47 | 1 | #include "mbed.h" |
franzpaulus | 0:56bf58cdba47 | 2 | |
franzpaulus | 0:56bf58cdba47 | 3 | DigitalOut Led1(LED1); |
franzpaulus | 0:56bf58cdba47 | 4 | DigitalOut Led2(LED2); |
franzpaulus | 0:56bf58cdba47 | 5 | DigitalOut Led3(LED3); |
franzpaulus | 0:56bf58cdba47 | 6 | DigitalOut Led4(LED4); |
franzpaulus | 0:56bf58cdba47 | 7 | InterruptIn SW1(p14); |
franzpaulus | 1:e8151ab43b58 | 8 | Timer T1; |
franzpaulus | 0:56bf58cdba47 | 9 | |
franzpaulus | 1:e8151ab43b58 | 10 | enum nextState {ST_GREEN, ST_YELLOW, ST_RED, ST_REDYELLOW}; |
franzpaulus | 0:56bf58cdba47 | 11 | nextState state; |
franzpaulus | 0:56bf58cdba47 | 12 | |
franzpaulus | 0:56bf58cdba47 | 13 | bool pressed = false; |
franzpaulus | 0:56bf58cdba47 | 14 | |
franzpaulus | 1:e8151ab43b58 | 15 | void rise(void) { |
franzpaulus | 0:56bf58cdba47 | 16 | wait_ms(20); |
franzpaulus | 0:56bf58cdba47 | 17 | pressed = true; |
franzpaulus | 0:56bf58cdba47 | 18 | } |
franzpaulus | 0:56bf58cdba47 | 19 | |
franzpaulus | 0:56bf58cdba47 | 20 | bool CheckFlag() |
franzpaulus | 0:56bf58cdba47 | 21 | { |
franzpaulus | 0:56bf58cdba47 | 22 | if( pressed ) { |
franzpaulus | 1:e8151ab43b58 | 23 | pressed = false; |
franzpaulus | 0:56bf58cdba47 | 24 | return true; |
franzpaulus | 0:56bf58cdba47 | 25 | } |
franzpaulus | 0:56bf58cdba47 | 26 | return false; |
franzpaulus | 0:56bf58cdba47 | 27 | } |
franzpaulus | 0:56bf58cdba47 | 28 | |
franzpaulus | 1:e8151ab43b58 | 29 | void ST_Green(){ |
franzpaulus | 1:e8151ab43b58 | 30 | T1.reset(); |
franzpaulus | 0:56bf58cdba47 | 31 | while(true) { |
franzpaulus | 0:56bf58cdba47 | 32 | Led1 = 1; |
franzpaulus | 1:e8151ab43b58 | 33 | Led2 = 0; |
franzpaulus | 1:e8151ab43b58 | 34 | Led3 = 0; |
franzpaulus | 1:e8151ab43b58 | 35 | if(CheckFlag() || T1.read() >= 8) { |
franzpaulus | 1:e8151ab43b58 | 36 | state = ST_YELLOW; |
franzpaulus | 0:56bf58cdba47 | 37 | return; |
franzpaulus | 0:56bf58cdba47 | 38 | } |
franzpaulus | 0:56bf58cdba47 | 39 | } |
franzpaulus | 0:56bf58cdba47 | 40 | } |
franzpaulus | 0:56bf58cdba47 | 41 | |
franzpaulus | 1:e8151ab43b58 | 42 | void ST_Yellow(void){ |
franzpaulus | 1:e8151ab43b58 | 43 | T1.reset(); |
franzpaulus | 0:56bf58cdba47 | 44 | while(true) { |
franzpaulus | 0:56bf58cdba47 | 45 | Led1 = 0; |
franzpaulus | 1:e8151ab43b58 | 46 | Led2 = 1; |
franzpaulus | 1:e8151ab43b58 | 47 | if(CheckFlag() || T1.read() >= 2) { |
franzpaulus | 1:e8151ab43b58 | 48 | state = ST_RED; |
franzpaulus | 1:e8151ab43b58 | 49 | return; |
franzpaulus | 1:e8151ab43b58 | 50 | } |
franzpaulus | 1:e8151ab43b58 | 51 | } |
franzpaulus | 1:e8151ab43b58 | 52 | } |
franzpaulus | 1:e8151ab43b58 | 53 | |
franzpaulus | 1:e8151ab43b58 | 54 | void ST_Red(void){ |
franzpaulus | 1:e8151ab43b58 | 55 | T1.reset(); |
franzpaulus | 1:e8151ab43b58 | 56 | while(true) { |
franzpaulus | 1:e8151ab43b58 | 57 | Led2 = 0; |
franzpaulus | 1:e8151ab43b58 | 58 | Led3 = 1; |
franzpaulus | 1:e8151ab43b58 | 59 | if(CheckFlag() || T1.read() >= 8) { |
franzpaulus | 1:e8151ab43b58 | 60 | state = ST_REDYELLOW; |
franzpaulus | 1:e8151ab43b58 | 61 | return; |
franzpaulus | 1:e8151ab43b58 | 62 | } |
franzpaulus | 1:e8151ab43b58 | 63 | } |
franzpaulus | 1:e8151ab43b58 | 64 | } |
franzpaulus | 1:e8151ab43b58 | 65 | |
franzpaulus | 1:e8151ab43b58 | 66 | void ST_RedYellow(void){ |
franzpaulus | 1:e8151ab43b58 | 67 | T1.reset(); |
franzpaulus | 1:e8151ab43b58 | 68 | while(true) { |
franzpaulus | 1:e8151ab43b58 | 69 | Led3 = 1; |
franzpaulus | 1:e8151ab43b58 | 70 | Led2 = 1; |
franzpaulus | 1:e8151ab43b58 | 71 | if(CheckFlag() || T1.read() >= 2) { |
franzpaulus | 1:e8151ab43b58 | 72 | state = ST_GREEN; |
franzpaulus | 0:56bf58cdba47 | 73 | return; |
franzpaulus | 0:56bf58cdba47 | 74 | } |
franzpaulus | 0:56bf58cdba47 | 75 | } |
franzpaulus | 0:56bf58cdba47 | 76 | } |
franzpaulus | 0:56bf58cdba47 | 77 | |
franzpaulus | 0:56bf58cdba47 | 78 | void ST_Error(){ |
franzpaulus | 0:56bf58cdba47 | 79 | while(1) { |
franzpaulus | 1:e8151ab43b58 | 80 | Led4 = !Led4; |
franzpaulus | 0:56bf58cdba47 | 81 | wait_ms(200); |
franzpaulus | 0:56bf58cdba47 | 82 | } |
franzpaulus | 0:56bf58cdba47 | 83 | } |
franzpaulus | 0:56bf58cdba47 | 84 | |
franzpaulus | 0:56bf58cdba47 | 85 | void stateMachine() |
franzpaulus | 0:56bf58cdba47 | 86 | { |
franzpaulus | 0:56bf58cdba47 | 87 | switch (state) |
franzpaulus | 0:56bf58cdba47 | 88 | { |
franzpaulus | 1:e8151ab43b58 | 89 | case ST_GREEN: ST_Green(); |
franzpaulus | 1:e8151ab43b58 | 90 | break; |
franzpaulus | 1:e8151ab43b58 | 91 | case ST_YELLOW: ST_Yellow(); |
franzpaulus | 0:56bf58cdba47 | 92 | break; |
franzpaulus | 1:e8151ab43b58 | 93 | case ST_RED: ST_Red(); |
franzpaulus | 1:e8151ab43b58 | 94 | break; |
franzpaulus | 1:e8151ab43b58 | 95 | case ST_REDYELLOW: ST_RedYellow(); |
franzpaulus | 0:56bf58cdba47 | 96 | break; |
franzpaulus | 0:56bf58cdba47 | 97 | default: ST_Error(); |
franzpaulus | 0:56bf58cdba47 | 98 | break; |
franzpaulus | 0:56bf58cdba47 | 99 | } |
franzpaulus | 0:56bf58cdba47 | 100 | } |
franzpaulus | 0:56bf58cdba47 | 101 | |
franzpaulus | 0:56bf58cdba47 | 102 | int main() |
franzpaulus | 0:56bf58cdba47 | 103 | { |
franzpaulus | 2:f28f1da2b421 | 104 | printf("Ampelsteuerung wurde gestartet... \n"); |
franzpaulus | 1:e8151ab43b58 | 105 | T1.start(); |
franzpaulus | 1:e8151ab43b58 | 106 | SW1.rise(&rise); |
franzpaulus | 0:56bf58cdba47 | 107 | while(1) { |
franzpaulus | 0:56bf58cdba47 | 108 | stateMachine(); |
franzpaulus | 0:56bf58cdba47 | 109 | } |
franzpaulus | 0:56bf58cdba47 | 110 | } |