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

Dependencies:   mbed

Revision:
0:9a9e02000311
Child:
1:7bad12e1bbbc
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Tue Jul 03 12:02:52 2018 +0000
@@ -0,0 +1,341 @@
+#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();
+    
+    }
+}
\ No newline at end of file