simple 3 traffic light with interrupt (to change specific traffic light to green)

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

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 }