Boon Boon
/
traffic_light_gate_pj
simple 3 traffic light with interrupt (to change specific traffic light to green)
main.cpp
- Committer:
- daklowprofile
- Date:
- 2018-07-03
- Revision:
- 0:9a9e02000311
- Child:
- 1:7bad12e1bbbc
File content as of revision 0:9a9e02000311:
#include "mbed.h" #define MAX_LEN 64 //tester //DigitalOut led1(LED1); //InterruptIn button(p28); //Timer class Timer timer_tf; //print for debug Serial pc(USBTX, USBRX); DigitalOut led1(LED1); DigitalOut led2(LED2); DigitalOut led3(LED3); //interrupt indicator only on p13,14,27,28 InterruptIn button1(p14); InterruptIn button2(p27); InterruptIn button3(p28); //T1 DigitalOut t1red(p5); DigitalOut t1yellow(p6); DigitalOut t1green(p7); //T2 DigitalOut t2red(p11); DigitalOut t2yellow(p12); DigitalOut t2green(p13); //T3 DigitalOut t3red(p18); DigitalOut t3yellow(p19); DigitalOut t3green(p20); //switch //DigitalIn button1(p26); //DigitalIn button2(p27); //DigitalIn button3(p28); void t1light(char a){ t1red = 0; t1yellow = 0; t1green = 0; if (a == 'R'){ t1red = 1; t1yellow = 0; t1green = 0; }else if(a == 'Y'){ t1red = 0; t1yellow = 1; t1green = 0; }else if(a == 'G'){ t1red = 0; t1yellow = 0; t1green = 1; }else{ t1red = 0; t1yellow = 0; t1green = 0; } } void t2light(char a){ t2red = 0; t2yellow = 0; t2green = 0; if (a == 'R'){ t2red = 1; t2yellow = 0; t2green = 0; }else if(a == 'Y'){ t2red = 0; t2yellow = 1; t2green = 0; }else if(a == 'G'){ t2red = 0; t2yellow = 0; t2green = 1; }else{ t2red = 0; t2yellow = 0; t2green = 0; } } void t3light(char a){ t3red = 0; t3yellow = 0; t3green = 0; if (a == 'R'){ t3red = 1; t3yellow = 0; t3green = 0; }else if(a == 'Y'){ t3red = 0; t3yellow = 1; t3green = 0; }else if(a == 'G'){ t3red = 0; t3yellow = 0; t3green = 1; }else{ t3red = 0; t3yellow = 0; t3green = 0; } } void traffic (char t1, char t2, char t3, int time_end){ if(timer_tf.read() <= time_end){ t1light(t1); t2light(t2); t3light(t3); timer_tf.reset(); } //wait(time); } void traffic_timer (char t1, char t2, char t3){ t1light(t1); t2light(t2); t3light(t3); } void traffic_default (char t1, char t2, char t3, int time){ t1light(t1); t2light(t2); t3light(t3); wait(time); } void normal_traffic(){ ///* if(timer_tf.read() >= 0 && timer_tf.read() <= 47){ traffic_timer('G','R','R'); } if(timer_tf.read() >= 48 && timer_tf.read() <= 51){ traffic_timer('Y','R','R'); } if(timer_tf.read() >= 52 && timer_tf.read() <= 90){ traffic_timer('R','G','R'); } if(timer_tf.read() >= 91 && timer_tf.read() <= 94){ traffic_timer('R','Y','R'); } if(timer_tf.read() >= 95 && timer_tf.read() <= 165){ traffic_timer('R','R','G'); } if(timer_tf.read() >= 166 && timer_tf.read() <= 169){ traffic_timer('R','R','Y'); } /* if(timer_tf.read() >= 0 && timer_tf.read() <= 5){ traffic_timer('G','R','R'); } if(timer_tf.read() >= 6 && timer_tf.read() <= 10){ traffic_timer('Y','R','R'); } if(timer_tf.read() >= 11 && timer_tf.read() <= 15){ traffic_timer('R','G','R'); } if(timer_tf.read() >= 16 && timer_tf.read() <= 20){ traffic_timer('R','Y','R'); } if(timer_tf.read() >= 21 && timer_tf.read() <= 25){ traffic_timer('R','R','G'); } if(timer_tf.read() >= 26 && timer_tf.read() <= 30){ traffic_timer('R','R','Y'); } */ if(timer_tf.read() >= 170){ timer_tf.reset(); } //traffic_default('G','R','R',47); //traffic_default('Y','R','R',3); //traffic_default('R','G','R',38); //traffic_default('R','Y','R',3); //traffic_default('R','R','G',70); //traffic_default('R','R','Y',3); } void flip1() { led1 = !led1; timer_tf.stop(); //pc.printf("%f\n",timer_tf.read()); //wait(10); //pc.printf("%f\n",timer_tf.read()); //imer_tf.start(); //wait(5); //pc.printf("%f\n",timer_tf.read()); /* if(timer_tf.read() <= 47){ wait(15); } */ if(timer_tf.read() >= 0/*48*/ && timer_tf.read() <= 51){ wait(15); } if(timer_tf.read() >= 52 && timer_tf.read() <= 90){ //traffic_timer('R','G','R'); traffic_default('R','Y','R',3); traffic_default('G','R','R',15); traffic_default('Y','R','R',3); } if(timer_tf.read() >= 91 && timer_tf.read() <= 94){ //traffic_timer('R','Y','R'); wait(3); traffic_default('G','R','R',15); traffic_default('Y','R','R',3); } if(timer_tf.read() >= 95 && timer_tf.read() <= 165){ //traffic_timer('R','R','G'); traffic_default('R','R','Y',3); traffic_default('G','R','R',15); traffic_default('Y','R','R',3); } if(timer_tf.read() >= 166 && timer_tf.read() <= 169){ //traffic_timer('R','R','Y'); wait(3); traffic_default('G','R','R',15); traffic_default('Y','R','R',3); } timer_tf.start(); led1 = !led1; } void flip2() { led2 = !led2; timer_tf.stop(); if(timer_tf.read() >= 0 && timer_tf.read() <= 47){ //traffic_timer('G','R','R'); traffic_default('Y','R','R',3); traffic_default('R','G','R',15); traffic_default('R','Y','R',3); } if(timer_tf.read() >= 48 && timer_tf.read() <= 51){ //traffic_timer('Y','R','R'); wait(3); traffic_default('R','G','R',15); traffic_default('R','Y','R',3); } /* if(timer_tf.read() >= 52 && timer_tf.read() <= 90){ //traffic_timer('R','G','R'); wait(15); } */ if(timer_tf.read() >= 52/*91*/ && timer_tf.read() <= 94){ //traffic_timer('R','Y','R'); wait(15); } if(timer_tf.read() >= 95 && timer_tf.read() <= 165){ //traffic_timer('R','R','G'); traffic_default('R','R','Y',3); traffic_default('R','G','R',15); traffic_default('R','Y','R',3); } if(timer_tf.read() >= 166 && timer_tf.read() <= 169){ //traffic_timer('R','R','Y'); wait(3); traffic_default('R','G','R',15); traffic_default('R','Y','R',3); } timer_tf.start(); led2 = !led2; } void flip3() { led3 = !led3; timer_tf.stop(); if(timer_tf.read() >= 0 && timer_tf.read() <= 47){ //traffic_timer('G','R','R'); traffic_default('Y','R','R',3); traffic_default('R','R','G',15); traffic_default('R','R','Y',3); } if(timer_tf.read() >= 48 && timer_tf.read() <= 51){ //traffic_timer('Y','R','R'); wait(3); traffic_default('R','R','G',15); traffic_default('R','R','Y',3); } if(timer_tf.read() >= 52 && timer_tf.read() <= 90){ //traffic_timer('R','G','R'); traffic_default('R','Y','R',3); traffic_default('R','R','G',15); traffic_default('R','R','Y',3); } if(timer_tf.read() >= 52/*91*/ && timer_tf.read() <= 94){ //traffic_timer('R','Y','R'); wait(3); traffic_default('R','R','G',15); traffic_default('R','R','Y',3); } /* if(timer_tf.read() >= 95 && timer_tf.read() <= 165){ //traffic_timer('R','R','G'); } */ if(timer_tf.read() >= 95/*166*/ && timer_tf.read() <= 169){ //traffic_timer('R','R','Y'); wait(15); } timer_tf.start(); led3 = !led3; } int main() { timer_tf.start(); /* if(button1 == 1){ flip1(); }else if(button2 == 1){ flip2(); }else if(button3 == 1){ flip3(); }else{} */ button1.mode(PullUp); button1.fall(&flip1); button2.mode(PullUp); button2.fall(&flip2); button3.mode(PullUp); button3.fall(&flip3); while(1){ normal_traffic(); } }