Ampelsteuerung über Timer und manuell weiterschaltbar.

Dependencies:   mbed

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?

UserRevisionLine numberNew 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 }