OBU device client
Dependencies: C12832 EthernetInterface mbed-rtos mbed
Diff: main.cpp
- Revision:
- 0:8bda299b839b
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu Sep 07 13:38:17 2017 +0000 @@ -0,0 +1,193 @@ +//client_showout +#include "mbed.h" +#include "EthernetInterface.h" +#include "C12832.h" + +C12832 lcd(D11, D13, D12, D7, D10); +DigitalOut red(LED_RED); +DigitalOut green(LED_GREEN); + +static const char* SERVER_IP = "192.168.1.1"; +static const char* CLIENT_IP = "192.168.1.2"; +static const char* MASK = "255.255.255.0"; +static const char* GATEWAY = "192.168.1.1"; +EthernetInterface eth; +Thread *transmitter; +Thread *receiver; +Thread *init; +void transmit(void const *args); +void receive(void const *args); +void init_eth(void const *args); +int n; +char counter[7]= {0}; +char counter1[4]= {0}; + +//init eth point +void init_eth(void const *args) +{ + eth.init(CLIENT_IP, MASK, GATEWAY); + int num=eth.connect(); + if(num!=-1) { + transmitter= new Thread(transmit); + receiver=new Thread(receive); + } +} +//transmit function send information +void transmit(void const *args) +{ + Endpoint server; + UDPSocket sock; + sock.init(); + server.set_address(SERVER_IP, 6503); + while(1) { + sock.sendTo(server, counter, sizeof(counter)); + } +} +//receive function receive to array "counter1" +void receive(void const *args) +{ + UDPSocket server; + Endpoint client; + server.bind(6500); + while(1) { + client.set_address(CLIENT_IP,6500); + n = server.receiveFrom(client, counter1, sizeof(counter1)); + if (counter1[0]==0&&counter1[1]==0&&counter1[2]==1) { + red =0; + green=1; + lcd.cls(); + lcd.locate(0,3); + lcd.printf("red %d sec to green",counter1[3]); + //lcd.locate(0,15); + //lcd.printf("%d sec to green",counter1[3]); + } else if (counter1[0]==0&&counter1[1]==1&&counter1[2]==0) { + green =0; + red =1; + lcd.cls(); + lcd.locate(0,3); + lcd.printf("green %d sec to yellow",counter1[3]); + //lcd.locate(0,15); + //lcd.printf("%d sec to yellow",counter1[3]); + } else if(counter1[0]==1&&counter1[1]==0&&counter1[2]==0) { + red =0; + green =0; + lcd.cls(); + lcd.locate(0,3); + lcd.printf("yellow %d sec to red",counter1[3]); + /*lcd.locate(0,15); + lcd.printf("%d sec to red",counter1[3]);*/ + } + wait(0.3f); + } +} +//random 0-9 number +char random_num(void) +{ + return rand()%9; +} +//random 0-25 number +char random_1_ABC(void) +{ + return 1+rand()%25; +} +//num 0-25 <=>'A'-'Z' +char random_2_ABC(char x) +{ + if(x==1) { + return 'A'; + } else if(x==2) { + return 'B'; + } else if(x==3) { + return 'C'; + } else if(x==4) { + return 'D'; + } else if(x==5) { + return 'E'; + } else if(x==6) { + return 'F'; + } else if(x==7) { + return 'G'; + } else if(x==8) { + return 'H'; + } else if(x==9) { + return 'I'; + } else if(x==10) { + return 'J'; + } else if(x==11) { + return 'K'; + } else if(x==12) { + return 'L'; + } else if(x==13) { + return 'M'; + } else if(x==14) { + return 'N'; + } else if(x==15) { + return 'O'; + } else if(x==16) { + return 'P'; + } else if(x==17) { + return 'Q'; + } else if(x==18) { + return 'R'; + } else if(x==19) { + return 'S'; + } else if(x==20) { + return 'T'; + } else if(x==21) { + return 'U'; + } else if(x==22) { + return 'V'; + } else if(x==23) { + return 'W'; + } else if(x==24) { + return 'X'; + } else if(x==25) { + return 'Y'; + } else { + return 'Z'; + } +} +//first 2 vehicle number +char first_2_word(void) +{ + while(1) { + char num =random_2_ABC(random_1_ABC()); + if(num!='I'&&num!='Q'&&num!='Z') { + return num; + } + } +} +//last 3 vehicle number +char last_3_word(void) +{ + while(1) { + char num =random_2_ABC(random_1_ABC()); + if(num!='I'&&num!='Q') { + return num; + } + } +} +//send all vehicle number to array "counter" +void setcounter1(void) +{ + counter[0]=first_2_word(); + counter[1]=first_2_word(); + counter[2]=random_num(); + counter[3]=random_num(); + counter[4]=last_3_word(); + counter[5]=last_3_word(); + counter[6]=last_3_word(); + /*lcd.cls(); + lcd.locate(0,3); + lcd.printf("%c%c%d%d%c%c%c",counter[0],counter[1],counter[2],counter[3],counter[4],counter[5],counter[6]);*/ + wait(3); +} +int main() +{ + red =1; + green =1; + init=new Thread(init_eth); + while (true) { + setcounter1(); + } +}