traffic light controller with RPC over http interrupter
Dependencies: EthernetInterface HTTPClient HTTPServer mbed-rpc mbed-rtos mbed
main.cpp
- Committer:
- daklowprofile
- Date:
- 2018-07-16
- Revision:
- 0:36fbb19fb8fb
- Child:
- 1:2c577df21639
File content as of revision 0:36fbb19fb8fb:
#include "mbed.h" #include "EthernetInterface.h" #include "HTTPServer.h" #include "HTTPClient.h" #include "mbed_rpc.h" Timer timer_tf; Serial pc(USBTX, USBRX); DigitalOut led1(LED1); DigitalOut led2(LED2); DigitalOut led3(LED3); //DigitalIn button1(p14); //DigitalIn button2(p27); //DigitalIn button3(p28); RpcDigitalOut button1(LED1,"button1"); RpcDigitalOut button2(LED2,"button2"); RpcDigitalOut button3(LED3,"button3"); //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(p17); //pin 20 cannot use for led 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_timer (char t1, char t2, char t3){ t1light(t1); t2light(t2); t3light(t3); } void http_get(){ char* Server = "http://192.168.1.111/PDRM/api/api_update.php"; char buffer[256]; HTTPClient http; buffer[0] = 0; sprintf(buffer,"%s?t1=%d,%d,%d&t2=%d,%d,%d&t3=%d,%d,%d",Server,t1red.read(),t1yellow.read(),t1green.read(),t2red.read(),t2yellow.read(),t2green.read(),t3red.read(),t3yellow.read(),t3green.read()); printf("Send to %s\r\n", buffer); http.get(buffer, buffer , 10); // Execute the URL of urlBuffer } void traffic_interrupt (char t1, char t2, char t3, int time){ t1light(t1); t2light(t2); t3light(t3); http_get(); wait(time); } void interrupt(int buffer){ switch(buffer){ case 1 : timer_tf.stop(); if(timer_tf.read() >= 0 && timer_tf.read() <= 51){ wait(15); }else if(timer_tf.read() >= 52 && timer_tf.read() <= 90){ traffic_interrupt('R','Y','R',3); traffic_interrupt('G','R','R',15); traffic_interrupt('Y','R','R',3); }else if(timer_tf.read() >= 91 && timer_tf.read() <= 94){ wait(3); traffic_interrupt('G','R','R',15); traffic_interrupt('Y','R','R',3); }else if(timer_tf.read() >= 95 && timer_tf.read() <= 165){ traffic_interrupt('R','R','Y',3); traffic_interrupt('G','R','R',15); traffic_interrupt('Y','R','R',3); }else if(timer_tf.read() >= 166 && timer_tf.read() <= 169){ wait(3); traffic_interrupt('G','R','R',15); traffic_interrupt('Y','R','R',3); } timer_tf.start(); break; case 2 : timer_tf.stop(); if(timer_tf.read() >= 0 && timer_tf.read() <= 47){ traffic_interrupt('Y','R','R',3); traffic_interrupt('R','G','R',15); traffic_interrupt('R','Y','R',3); }else if(timer_tf.read() >= 48 && timer_tf.read() <= 51){ wait(3); traffic_interrupt('R','G','R',15); traffic_interrupt('R','Y','R',3); }else if(timer_tf.read() >= 52 && timer_tf.read() <= 94){ wait(15); }else if(timer_tf.read() >= 95 && timer_tf.read() <= 165){ traffic_interrupt('R','R','Y',3); traffic_interrupt('R','G','R',15); traffic_interrupt('R','Y','R',3); }else if(timer_tf.read() >= 166 && timer_tf.read() <= 169){ wait(3); traffic_interrupt('R','G','R',15); traffic_interrupt('R','Y','R',3); } timer_tf.start(); break; case 3 : timer_tf.stop(); if(timer_tf.read() >= 0 && timer_tf.read() <= 47){ traffic_interrupt('Y','R','R',3); traffic_interrupt('R','R','G',15); traffic_interrupt('R','R','Y',3); }else if(timer_tf.read() >= 48 && timer_tf.read() <= 51){ wait(3); traffic_interrupt('R','R','G',15); traffic_interrupt('R','R','Y',3); }else if(timer_tf.read() >= 52 && timer_tf.read() <= 90){ traffic_interrupt('R','Y','R',3); traffic_interrupt('R','R','G',15); traffic_interrupt('R','R','Y',3); }else if(timer_tf.read() >= 91 && timer_tf.read() <= 94){ wait(3); traffic_interrupt('R','R','G',15); traffic_interrupt('R','R','Y',3); }else if(timer_tf.read() >= 95 && timer_tf.read() <= 169){ wait(15); } timer_tf.start(); break; } } //post when changed int t1red_o,t1yellow_o,t1green_o,t2red_o,t2yellow_o,t2green_o,t3red_o,t3yellow_o,t3green_o = 0; void change(int t1red_n, int t1yellow_n,int t1green_n, int t2red_n, int t2yellow_n, int t2green_n, int t3red_n, int t3yellow_n, int t3green_n){ if(t1red_o != t1red_n || t1yellow_o != t1yellow_n || t1green_o != t1green_n || t2red_o != t2red_n || t2yellow_o != t2yellow_n || t2green_o != t2green_n || t3red_o != t3red_n || t3yellow_o != t3yellow_n || t3green_o != t3green_n){ http_get(); t1red_o = t1red_n; t1yellow_o = t1yellow_n; t1green_o = t1green_n; t2red_o = t2red_n; t2yellow_o = t2yellow_n; t2green_o = t2green_n; t3red_o = t3red_n; t3yellow_o = t3yellow_n; t3green_o = t3green_n; }else{} } void normal_traffic(){ if(timer_tf.read() >= 0 && timer_tf.read() <= 47){ traffic_timer('G','R','R'); }else if(timer_tf.read() >= 48 && timer_tf.read() <= 51){ traffic_timer('Y','R','R'); }else if(timer_tf.read() >= 52 && timer_tf.read() <= 90){ traffic_timer('R','G','R'); }else if(timer_tf.read() >= 91 && timer_tf.read() <= 94){ traffic_timer('R','Y','R'); }else if(timer_tf.read() >= 95 && timer_tf.read() <= 165){ traffic_timer('R','R','G'); }else if(timer_tf.read() >= 166 && timer_tf.read() <= 169){ traffic_timer('R','R','Y'); }else if(timer_tf.read() >= 170){ timer_tf.reset(); } if(button1.read()==1){ interrupt(1); button1.write(0); }else if(button2.read()==1){ interrupt(2); button2.write(0); }else if(button3.read()==1){ interrupt(3); button3.write(0); } change(t1red.read(),t1yellow.read(),t1green.read(),t2red.read(),t2yellow.read(),t2green.read(),t3red.read(),t3yellow.read(),t3green.read()); } int main() { EthernetInterface eth; HTTPServer svr; button1.write(0); button2.write(0); button3.write(0); RPC::add_rpc_class<RpcDigitalOut>(); printf("Setting up...\r\n"); eth.init(); int ethErr = eth.connect(); if(ethErr < 0) { printf("Error %d in setup.\r\n", ethErr); return -1; } svr.addHandler<HTTPRpcRequestHandler>("/rpc"); //attach server to port 80 svr.start(80, ð); printf("Listening...\n"); //Listen indefinitely Timer tm; tm.start(); timer_tf.start(); while(1) { //while(button1.read()==0&&button2.read()==0&&button3.read()==0){ normal_traffic(); //} //wait(20); svr.poll(); if(tm.read()>.5) { tm.start(); } } }