Boon Boon
/
traffic_light_gate_pj
simple 3 traffic light with interrupt (to change specific traffic light to green)
Embed:
(wiki syntax)
Show/hide line numbers
main.cpp
00001 #include "mbed.h" 00002 00003 00004 #define MAX_LEN 64 00005 //tester 00006 //DigitalOut led1(LED1); 00007 //InterruptIn button(p28); 00008 00009 //Timer class 00010 Timer timer_tf; 00011 00012 //print for debug 00013 Serial pc(USBTX, USBRX); 00014 00015 00016 DigitalOut led1(LED1); 00017 DigitalOut led2(LED2); 00018 DigitalOut led3(LED3); 00019 00020 //interrupt indicator only on p13,14,27,28 00021 InterruptIn button1(p14); 00022 InterruptIn button2(p27); 00023 InterruptIn button3(p28); 00024 00025 //T1 00026 DigitalOut t1red(p5); 00027 DigitalOut t1yellow(p6); 00028 DigitalOut t1green(p7); 00029 //T2 00030 DigitalOut t2red(p11); 00031 DigitalOut t2yellow(p12); 00032 DigitalOut t2green(p13); 00033 //T3 00034 DigitalOut t3red(p18); 00035 DigitalOut t3yellow(p19); 00036 DigitalOut t3green(p20); 00037 00038 //switch 00039 //DigitalIn button1(p26); 00040 //DigitalIn button2(p27); 00041 //DigitalIn button3(p28); 00042 00043 00044 00045 00046 void t1light(char a){ 00047 t1red = 0; 00048 t1yellow = 0; 00049 t1green = 0; 00050 if (a == 'R'){ 00051 t1red = 1; 00052 t1yellow = 0; 00053 t1green = 0; 00054 }else if(a == 'Y'){ 00055 t1red = 0; 00056 t1yellow = 1; 00057 t1green = 0; 00058 }else if(a == 'G'){ 00059 t1red = 0; 00060 t1yellow = 0; 00061 t1green = 1; 00062 }else{ 00063 t1red = 0; 00064 t1yellow = 0; 00065 t1green = 0; 00066 } 00067 } 00068 00069 void t2light(char a){ 00070 t2red = 0; 00071 t2yellow = 0; 00072 t2green = 0; 00073 if (a == 'R'){ 00074 t2red = 1; 00075 t2yellow = 0; 00076 t2green = 0; 00077 }else if(a == 'Y'){ 00078 t2red = 0; 00079 t2yellow = 1; 00080 t2green = 0; 00081 }else if(a == 'G'){ 00082 t2red = 0; 00083 t2yellow = 0; 00084 t2green = 1; 00085 }else{ 00086 t2red = 0; 00087 t2yellow = 0; 00088 t2green = 0; 00089 } 00090 } 00091 00092 void t3light(char a){ 00093 t3red = 0; 00094 t3yellow = 0; 00095 t3green = 0; 00096 if (a == 'R'){ 00097 t3red = 1; 00098 t3yellow = 0; 00099 t3green = 0; 00100 }else if(a == 'Y'){ 00101 t3red = 0; 00102 t3yellow = 1; 00103 t3green = 0; 00104 }else if(a == 'G'){ 00105 t3red = 0; 00106 t3yellow = 0; 00107 t3green = 1; 00108 }else{ 00109 t3red = 0; 00110 t3yellow = 0; 00111 t3green = 0; 00112 } 00113 } 00114 00115 void traffic (char t1, char t2, char t3, int time_end){ 00116 if(timer_tf.read() <= time_end){ 00117 t1light(t1); 00118 t2light(t2); 00119 t3light(t3); 00120 timer_tf.reset(); 00121 } 00122 //wait(time); 00123 } 00124 00125 void traffic_timer (char t1, char t2, char t3){ 00126 t1light(t1); 00127 t2light(t2); 00128 t3light(t3); 00129 } 00130 00131 void traffic_default (char t1, char t2, char t3, int time){ 00132 t1light(t1); 00133 t2light(t2); 00134 t3light(t3); 00135 wait(time); 00136 } 00137 00138 00139 00140 void normal_traffic(){ 00141 ///* 00142 if(timer_tf.read() >= 0 && timer_tf.read() <= 47){ 00143 traffic_timer('G','R','R'); 00144 } 00145 if(timer_tf.read() >= 48 && timer_tf.read() <= 51){ 00146 traffic_timer('Y','R','R'); 00147 } 00148 if(timer_tf.read() >= 52 && timer_tf.read() <= 90){ 00149 traffic_timer('R','G','R'); 00150 } 00151 if(timer_tf.read() >= 91 && timer_tf.read() <= 94){ 00152 traffic_timer('R','Y','R'); 00153 } 00154 if(timer_tf.read() >= 95 && timer_tf.read() <= 165){ 00155 traffic_timer('R','R','G'); 00156 } 00157 if(timer_tf.read() >= 166 && timer_tf.read() <= 169){ 00158 traffic_timer('R','R','Y'); 00159 } 00160 /* 00161 if(timer_tf.read() >= 0 && timer_tf.read() <= 5){ 00162 traffic_timer('G','R','R'); 00163 } 00164 if(timer_tf.read() >= 6 && timer_tf.read() <= 10){ 00165 traffic_timer('Y','R','R'); 00166 } 00167 if(timer_tf.read() >= 11 && timer_tf.read() <= 15){ 00168 traffic_timer('R','G','R'); 00169 } 00170 if(timer_tf.read() >= 16 && timer_tf.read() <= 20){ 00171 traffic_timer('R','Y','R'); 00172 } 00173 if(timer_tf.read() >= 21 && timer_tf.read() <= 25){ 00174 traffic_timer('R','R','G'); 00175 } 00176 if(timer_tf.read() >= 26 && timer_tf.read() <= 30){ 00177 traffic_timer('R','R','Y'); 00178 } 00179 */ 00180 if(timer_tf.read() >= 170){ 00181 timer_tf.reset(); 00182 } 00183 00184 //traffic_default('G','R','R',47); 00185 //traffic_default('Y','R','R',3); 00186 //traffic_default('R','G','R',38); 00187 //traffic_default('R','Y','R',3); 00188 //traffic_default('R','R','G',70); 00189 //traffic_default('R','R','Y',3); 00190 } 00191 00192 void flip1() { 00193 led1 = !led1; 00194 timer_tf.stop(); 00195 //pc.printf("%f\n",timer_tf.read()); 00196 //wait(10); 00197 //pc.printf("%f\n",timer_tf.read()); 00198 //imer_tf.start(); 00199 //wait(5); 00200 //pc.printf("%f\n",timer_tf.read()); 00201 /* 00202 if(timer_tf.read() <= 47){ 00203 wait(15); 00204 } 00205 */ 00206 if(timer_tf.read() >= 0/*48*/ && timer_tf.read() <= 51){ 00207 wait(15); 00208 } 00209 if(timer_tf.read() >= 52 && timer_tf.read() <= 90){ 00210 //traffic_timer('R','G','R'); 00211 traffic_default('R','Y','R',3); 00212 traffic_default('G','R','R',15); 00213 traffic_default('Y','R','R',3); 00214 } 00215 if(timer_tf.read() >= 91 && timer_tf.read() <= 94){ 00216 //traffic_timer('R','Y','R'); 00217 wait(3); 00218 traffic_default('G','R','R',15); 00219 traffic_default('Y','R','R',3); 00220 } 00221 if(timer_tf.read() >= 95 && timer_tf.read() <= 165){ 00222 //traffic_timer('R','R','G'); 00223 traffic_default('R','R','Y',3); 00224 traffic_default('G','R','R',15); 00225 traffic_default('Y','R','R',3); 00226 } 00227 if(timer_tf.read() >= 166 && timer_tf.read() <= 169){ 00228 //traffic_timer('R','R','Y'); 00229 wait(3); 00230 traffic_default('G','R','R',15); 00231 traffic_default('Y','R','R',3); 00232 } 00233 timer_tf.start(); 00234 led1 = !led1; 00235 } 00236 00237 void flip2() { 00238 led2 = !led2; 00239 timer_tf.stop(); 00240 if(timer_tf.read() >= 0 && timer_tf.read() <= 47){ 00241 //traffic_timer('G','R','R'); 00242 traffic_default('Y','R','R',3); 00243 traffic_default('R','G','R',15); 00244 traffic_default('R','Y','R',3); 00245 } 00246 if(timer_tf.read() >= 48 && timer_tf.read() <= 51){ 00247 //traffic_timer('Y','R','R'); 00248 wait(3); 00249 traffic_default('R','G','R',15); 00250 traffic_default('R','Y','R',3); 00251 } 00252 /* 00253 if(timer_tf.read() >= 52 && timer_tf.read() <= 90){ 00254 //traffic_timer('R','G','R'); 00255 wait(15); 00256 } 00257 */ 00258 if(timer_tf.read() >= 52/*91*/ && timer_tf.read() <= 94){ 00259 //traffic_timer('R','Y','R'); 00260 wait(15); 00261 } 00262 if(timer_tf.read() >= 95 && timer_tf.read() <= 165){ 00263 //traffic_timer('R','R','G'); 00264 traffic_default('R','R','Y',3); 00265 traffic_default('R','G','R',15); 00266 traffic_default('R','Y','R',3); 00267 } 00268 if(timer_tf.read() >= 166 && timer_tf.read() <= 169){ 00269 //traffic_timer('R','R','Y'); 00270 wait(3); 00271 traffic_default('R','G','R',15); 00272 traffic_default('R','Y','R',3); 00273 } 00274 timer_tf.start(); 00275 led2 = !led2; 00276 } 00277 00278 void flip3() { 00279 led3 = !led3; 00280 timer_tf.stop(); 00281 if(timer_tf.read() >= 0 && timer_tf.read() <= 47){ 00282 //traffic_timer('G','R','R'); 00283 traffic_default('Y','R','R',3); 00284 traffic_default('R','R','G',15); 00285 traffic_default('R','R','Y',3); 00286 } 00287 if(timer_tf.read() >= 48 && timer_tf.read() <= 51){ 00288 //traffic_timer('Y','R','R'); 00289 wait(3); 00290 traffic_default('R','R','G',15); 00291 traffic_default('R','R','Y',3); 00292 } 00293 if(timer_tf.read() >= 52 && timer_tf.read() <= 90){ 00294 //traffic_timer('R','G','R'); 00295 traffic_default('R','Y','R',3); 00296 traffic_default('R','R','G',15); 00297 traffic_default('R','R','Y',3); 00298 } 00299 if(timer_tf.read() >= 91 && timer_tf.read() <= 94){ 00300 //traffic_timer('R','Y','R'); 00301 wait(3); 00302 traffic_default('R','R','G',15); 00303 traffic_default('R','R','Y',3); 00304 } 00305 /* 00306 if(timer_tf.read() >= 95 && timer_tf.read() <= 165){ 00307 //traffic_timer('R','R','G'); 00308 } 00309 */ 00310 if(timer_tf.read() >= 95/*166*/ && timer_tf.read() <= 169){ 00311 //traffic_timer('R','R','Y'); 00312 wait(15); 00313 } 00314 timer_tf.start(); 00315 led3 = !led3; 00316 } 00317 00318 00319 int main() { 00320 00321 timer_tf.start(); 00322 /* 00323 if(button1 == 1){ 00324 flip1(); 00325 }else if(button2 == 1){ 00326 flip2(); 00327 }else if(button3 == 1){ 00328 flip3(); 00329 }else{} 00330 */ 00331 button1.mode(PullUp); 00332 button1.fall(&flip1); 00333 button2.mode(PullUp); 00334 button2.fall(&flip2); 00335 button3.mode(PullUp); 00336 button3.fall(&flip3); 00337 while(1){ 00338 normal_traffic(); 00339 00340 } 00341 }
Generated on Mon Jul 18 2022 16:40:17 by 1.7.2