ampel2

Dependencies:   mbed

Committer:
trivla
Date:
Mon Mar 16 15:27:20 2015 +0000
Revision:
0:adf5179f29bb
ampel2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
trivla 0:adf5179f29bb 1
trivla 0:adf5179f29bb 2 #include "mbed.h"
trivla 0:adf5179f29bb 3 #include "BtnEventM0.h"
trivla 0:adf5179f29bb 4
trivla 0:adf5179f29bb 5 BusOut lb(P1_7,P1_6,P1_4,P1_3,P1_1,P1_0,LED4,LED3,LED2,LED1); //Ledbar definieren ohne P1_13 und P1_12
trivla 0:adf5179f29bb 6 BusOut stLED(P1_13,P1_12); //P1_13 und P1_12 definieren
trivla 0:adf5179f29bb 7
trivla 0:adf5179f29bb 8 Serial pc(USBTX, USBRX); //ein serielles Objekt anlegen
trivla 0:adf5179f29bb 9 BtnEventM0 Btn1(P0_15), Btn2(P0_23); //2 Buttons unter einer Custom Library definieren
trivla 0:adf5179f29bb 10
trivla 0:adf5179f29bb 11 //Custom Library: BtnEventM0.h
trivla 0:adf5179f29bb 12
trivla 0:adf5179f29bb 13 class Ampel
trivla 0:adf5179f29bb 14 {
trivla 0:adf5179f29bb 15 public:
trivla 0:adf5179f29bb 16 void Init() {
trivla 0:adf5179f29bb 17 state=1;
trivla 0:adf5179f29bb 18 t1.start();
trivla 0:adf5179f29bb 19 t2.start();
trivla 0:adf5179f29bb 20 t3.start();
trivla 0:adf5179f29bb 21 }
trivla 0:adf5179f29bb 22
trivla 0:adf5179f29bb 23 void rot();
trivla 0:adf5179f29bb 24 void gelb();
trivla 0:adf5179f29bb 25 void gruen();
trivla 0:adf5179f29bb 26 void gruen_bl();
trivla 0:adf5179f29bb 27 public:
trivla 0:adf5179f29bb 28 void rotAction();
trivla 0:adf5179f29bb 29 void gelbAction();
trivla 0:adf5179f29bb 30 void gruenAction();
trivla 0:adf5179f29bb 31 void gruen_blAction();
trivla 0:adf5179f29bb 32 public:
trivla 0:adf5179f29bb 33 //state sagt uns in welchem Zustand sich die Ampel gerade befindet
trivla 0:adf5179f29bb 34 int state;
trivla 0:adf5179f29bb 35 Timer t1;
trivla 0:adf5179f29bb 36 Timer t2;
trivla 0:adf5179f29bb 37 Timer t3;
trivla 0:adf5179f29bb 38
trivla 0:adf5179f29bb 39 } ;
trivla 0:adf5179f29bb 40
trivla 0:adf5179f29bb 41
trivla 0:adf5179f29bb 42 Ampel amp;
trivla 0:adf5179f29bb 43
trivla 0:adf5179f29bb 44 int main() //Main-Funktion
trivla 0:adf5179f29bb 45 {
trivla 0:adf5179f29bb 46 pc.baud(125000); // auf 125000 Bits/sec setzen
trivla 0:adf5179f29bb 47 Btn1.Init();
trivla 0:adf5179f29bb 48 amp.Init(); //Btn1 und Btn2 mit Init() ansprechen
trivla 0:adf5179f29bb 49 while(1) { //Die ganze Zeit durchlaufen
trivla 0:adf5179f29bb 50 if( amp.state==1 )
trivla 0:adf5179f29bb 51 amp.rot();
trivla 0:adf5179f29bb 52 if( amp.state==2 )
trivla 0:adf5179f29bb 53 amp.gelb();
trivla 0:adf5179f29bb 54 if( amp.state==3 )
trivla 0:adf5179f29bb 55 amp.gruen();
trivla 0:adf5179f29bb 56 if( amp.state==4 )
trivla 0:adf5179f29bb 57 amp.gruen_bl();
trivla 0:adf5179f29bb 58
trivla 0:adf5179f29bb 59 amp.state=1;
trivla 0:adf5179f29bb 60 }
trivla 0:adf5179f29bb 61
trivla 0:adf5179f29bb 62 }
trivla 0:adf5179f29bb 63
trivla 0:adf5179f29bb 64
trivla 0:adf5179f29bb 65 void Ampel::rot()
trivla 0:adf5179f29bb 66 {
trivla 0:adf5179f29bb 67 pc.printf("ROT\n");
trivla 0:adf5179f29bb 68 t3.reset();
trivla 0:adf5179f29bb 69 while(1) {
trivla 0:adf5179f29bb 70
trivla 0:adf5179f29bb 71 if(t3.read_ms()>3200) { // 3 sec sind abgelaufen
trivla 0:adf5179f29bb 72 state=2;
trivla 0:adf5179f29bb 73 return;
trivla 0:adf5179f29bb 74 }
trivla 0:adf5179f29bb 75 if(Btn1.CheckFlag()) {
trivla 0:adf5179f29bb 76 state=1;
trivla 0:adf5179f29bb 77 return;
trivla 0:adf5179f29bb 78 }
trivla 0:adf5179f29bb 79 rotAction();
trivla 0:adf5179f29bb 80 }
trivla 0:adf5179f29bb 81
trivla 0:adf5179f29bb 82
trivla 0:adf5179f29bb 83 }
trivla 0:adf5179f29bb 84 void Ampel::rotAction()
trivla 0:adf5179f29bb 85 {
trivla 0:adf5179f29bb 86 if(t1.read_ms()>200) { //Blinken
trivla 0:adf5179f29bb 87 t1.reset();
trivla 0:adf5179f29bb 88
trivla 0:adf5179f29bb 89 if (lb==0)
trivla 0:adf5179f29bb 90 lb=1;
trivla 0:adf5179f29bb 91 else
trivla 0:adf5179f29bb 92 lb=0;
trivla 0:adf5179f29bb 93 }
trivla 0:adf5179f29bb 94 if(t2.read_ms()>100) {
trivla 0:adf5179f29bb 95 t2.reset();
trivla 0:adf5179f29bb 96 pc.printf("2 %d \n" , t3.read_ms());
trivla 0:adf5179f29bb 97
trivla 0:adf5179f29bb 98 }
trivla 0:adf5179f29bb 99 }
trivla 0:adf5179f29bb 100
trivla 0:adf5179f29bb 101 void Ampel::gelb()
trivla 0:adf5179f29bb 102 {
trivla 0:adf5179f29bb 103 pc.printf("gelb\n");
trivla 0:adf5179f29bb 104 t3.reset();
trivla 0:adf5179f29bb 105 while(1) {
trivla 0:adf5179f29bb 106
trivla 0:adf5179f29bb 107 if(t3.read_ms()>4200) { // 3 sec sind abgelaufen
trivla 0:adf5179f29bb 108 state=3;
trivla 0:adf5179f29bb 109 return;
trivla 0:adf5179f29bb 110 }
trivla 0:adf5179f29bb 111 if(Btn1.CheckFlag()) {
trivla 0:adf5179f29bb 112 state=4;
trivla 0:adf5179f29bb 113 return;
trivla 0:adf5179f29bb 114 }
trivla 0:adf5179f29bb 115 gelbAction();
trivla 0:adf5179f29bb 116 }
trivla 0:adf5179f29bb 117
trivla 0:adf5179f29bb 118 }
trivla 0:adf5179f29bb 119
trivla 0:adf5179f29bb 120 void Ampel::gelbAction()
trivla 0:adf5179f29bb 121 {
trivla 0:adf5179f29bb 122 if(t1.read_ms()>200) { //Blinken
trivla 0:adf5179f29bb 123 t1.reset();
trivla 0:adf5179f29bb 124
trivla 0:adf5179f29bb 125 if (lb==0)
trivla 0:adf5179f29bb 126 lb=2;
trivla 0:adf5179f29bb 127 else
trivla 0:adf5179f29bb 128 lb=0;
trivla 0:adf5179f29bb 129 }
trivla 0:adf5179f29bb 130 if(t2.read_ms()>100) {
trivla 0:adf5179f29bb 131 t2.reset();
trivla 0:adf5179f29bb 132 pc.printf("2 %d \n" , t3.read_ms());
trivla 0:adf5179f29bb 133
trivla 0:adf5179f29bb 134 }
trivla 0:adf5179f29bb 135 }
trivla 0:adf5179f29bb 136
trivla 0:adf5179f29bb 137 void Ampel::gruen()
trivla 0:adf5179f29bb 138 {
trivla 0:adf5179f29bb 139 pc.printf("gruen \n");
trivla 0:adf5179f29bb 140 t3.reset();
trivla 0:adf5179f29bb 141 while(1) {
trivla 0:adf5179f29bb 142
trivla 0:adf5179f29bb 143 if(t3.read_ms()>5200) { // 3 sec sind abgelaufen
trivla 0:adf5179f29bb 144 state=3;
trivla 0:adf5179f29bb 145 return;
trivla 0:adf5179f29bb 146 }
trivla 0:adf5179f29bb 147 if(Btn1.CheckFlag()) {
trivla 0:adf5179f29bb 148 state=4;
trivla 0:adf5179f29bb 149 return;
trivla 0:adf5179f29bb 150 }
trivla 0:adf5179f29bb 151 gruenAction();
trivla 0:adf5179f29bb 152
trivla 0:adf5179f29bb 153
trivla 0:adf5179f29bb 154
trivla 0:adf5179f29bb 155 }
trivla 0:adf5179f29bb 156
trivla 0:adf5179f29bb 157 }
trivla 0:adf5179f29bb 158
trivla 0:adf5179f29bb 159 void Ampel::gruenAction()
trivla 0:adf5179f29bb 160 {
trivla 0:adf5179f29bb 161 if(t1.read_ms()>200) { //Blinken
trivla 0:adf5179f29bb 162 t1.reset();
trivla 0:adf5179f29bb 163
trivla 0:adf5179f29bb 164 if (lb==0)
trivla 0:adf5179f29bb 165 lb=4;
trivla 0:adf5179f29bb 166 else
trivla 0:adf5179f29bb 167 lb=0;
trivla 0:adf5179f29bb 168 }
trivla 0:adf5179f29bb 169 if(t2.read_ms()>100) {
trivla 0:adf5179f29bb 170 t2.reset();
trivla 0:adf5179f29bb 171 pc.printf("2 %d \n" , t3.read_ms());
trivla 0:adf5179f29bb 172
trivla 0:adf5179f29bb 173 }
trivla 0:adf5179f29bb 174
trivla 0:adf5179f29bb 175 }
trivla 0:adf5179f29bb 176
trivla 0:adf5179f29bb 177 void Ampel::gruen_bl()
trivla 0:adf5179f29bb 178 {
trivla 0:adf5179f29bb 179 pc.printf("gruen BLinken \n");
trivla 0:adf5179f29bb 180 t3.reset();
trivla 0:adf5179f29bb 181 while(1) {
trivla 0:adf5179f29bb 182
trivla 0:adf5179f29bb 183 if(t3.read_ms()>5200) { // 3 sec sind abgelaufen
trivla 0:adf5179f29bb 184 state=1;
trivla 0:adf5179f29bb 185 return;
trivla 0:adf5179f29bb 186 }
trivla 0:adf5179f29bb 187
trivla 0:adf5179f29bb 188 gruen_blAction();
trivla 0:adf5179f29bb 189
trivla 0:adf5179f29bb 190
trivla 0:adf5179f29bb 191
trivla 0:adf5179f29bb 192 }
trivla 0:adf5179f29bb 193
trivla 0:adf5179f29bb 194 }
trivla 0:adf5179f29bb 195 void Ampel::gruen_blAction()
trivla 0:adf5179f29bb 196 {
trivla 0:adf5179f29bb 197 if(t1.read_ms()>200) { //Blinken
trivla 0:adf5179f29bb 198 t1.reset();
trivla 0:adf5179f29bb 199
trivla 0:adf5179f29bb 200 if (lb==0)
trivla 0:adf5179f29bb 201 lb=3;
trivla 0:adf5179f29bb 202 else
trivla 0:adf5179f29bb 203 lb=0;
trivla 0:adf5179f29bb 204 }
trivla 0:adf5179f29bb 205 if(t2.read_ms()>100) {
trivla 0:adf5179f29bb 206 t2.reset();
trivla 0:adf5179f29bb 207 pc.printf("2 %d \n" , t3.read_ms());
trivla 0:adf5179f29bb 208
trivla 0:adf5179f29bb 209 }
trivla 0:adf5179f29bb 210
trivla 0:adf5179f29bb 211 }