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

Dependencies:   mbed

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();
    
    }
}