Therverson Kanavathy
/
RTES-20m_Shuttle_Test-Client
Shuttle Test Client
main.cpp
- Committer:
- tkanavathy
- Date:
- 2017-01-13
- Revision:
- 0:447b25550052
File content as of revision 0:447b25550052:
/*-- CLIENT INCLUDES ---------------------------------------------------------*/ #include "mbed.h" #include "EthernetInterface.h" /*-- GLOBAL CONSTANTS --------------------------------------------------------*/ const int PORT = 7; //arbitrary port /*-- IP CONSTANT CONFIGURATION --*/ static const char* SERVER_IP = "192.168.1.101"; //IP of server board static const char* CLIENT_IP = "192.168.1.102"; //IP of client board static const char* MASK = "255.255.255.0"; //mask static const char* GATEWAY = "192.168.1.1"; //gateway /*-- INITIALISATION ----------------------------------------------------------*/ Serial pc(USBTX, USBRX); //create PC interface EthernetInterface eth; //create ethernet UDPSocket sock; //creat Ethernet socket Endpoint server; //create endpoint /* -- DECLARE LEDs for STATUS DISPLAY --*/ DigitalOut red(LED_RED); DigitalOut green(LED_GREEN); DigitalOut blue(LED_BLUE); /*-- DECLARE INTERRUPTS --*/ InterruptIn touch(SW2); InterruptIn butt3(SW3); Timer t_level, t_shuttle; //define timers to measure each level and shuttle /*--VARIABLES------------------------------------------------------------*/ int i; //Loop iteration counter int n; //size of received message char message[6] = {0,01,1,1,'\0'}; //MESSAGE status[1],level[2],blue[1],line[1] char c_status[1], c_level[2], c_blue[1], c_line[1]; //receival buffers /*---- Status of program? ----*/ /*------ 0 = Loaded --*/ /*------ 1 = Start --*/ /*------ 2 = In Progress --*/ /*------ 3 = Stop --*/ int status, level; //Keep track of the level of the Beep Test bool line; //Has the runner crossed the line? /*-- FUNCTION DECLARATIONS ---------------------------------------------------*/ void init_usb(void); //initializes pc.printf if required void init_eth(void); //initializes Ethernet void init_load(void); //Initialise program void send(void); //Send packets void receive(void); //Recv packets int main(void); //main void end_eth(void); //closes Ethernet socket /*-- INTERRUPT DEFINITIONS ---------------------------------------------------*/ void ISR1() { //Did the runner cross line in time, before showing RED? if (red == 0) line = false; //Crossed line late else line = true; // Crossed line in time } void ISR2() { //Reset the program status =0; } /*-- FUNCTION DEFINITIONS ---------------------------------------------------*/ /****INIT_USB BAUD RATE***/ void init_usb(void) { pc.baud(9600); //baud rate } /****OPEN_ETHERNET CONNECTION***/ void init_eth(void) { eth.init(CLIENT_IP, MASK, GATEWAY); //set up IP eth.connect(); //connect ethernet pc.printf("\nCLIENT - Client IP Address is %s\r\n", eth.getIPAddress()); //get client IP address sock.init(); //initialize socket server.set_address(SERVER_IP, PORT); //set address of server } /**** INITIALISE CLIENT PARAMETERS***/ void init_load(void) { //Initialise flags and reset timers level = 1; //Reset to starting level 1 line = true; //Client LED is solid BLUE in Loaded Status blue = 0; green = 1; red = 1; //Reset the timers t_level.reset(); t_shuttle.reset(); //20*3600/(8000+500*level) = 144/(level+16) sec } /**** SEND MESSAGE ***/ void send(void) { sprintf(message, "%i %02i %i %i %c", status, level, int(blue), line, '\0'); sock.sendTo(server, message, sizeof(message)); //send message pc.printf("CLIENT: Send '%s' to server %s\r\n", message, SERVER_IP);//print message } /**** RECEIVE ***/ void receive(void) { pc.printf("\nCLIENT: Waiting for UDP packet...\r\n"); //wait for packet n = sock.receiveFrom(server, message, sizeof(message)); //receive message from server message[n] = ' '; //Remove \0 from message pc.printf("CLIENT: Received '%s' from server %s\r\n", message, SERVER_IP); //print message from server sscanf(message, "%s %s %s %s", &c_status, &c_level, &c_blue, &c_line); status = atoi(c_status); level = atoi(c_level); blue = atoi(c_blue); c_blue[0] = (blue == 0) ? '0' : '1'; line = atoi(c_line); pc.printf("CLIENT: Converted '%i %i %c %i' from server \r\n", status, level, c_blue[0], line); //print converted message } //end receive() /****CLOSE_ETHERNET CONNECTION***/ void end_eth(void){ sock.close(); //close socket eth.disconnect(); //close Ethernet } /************ MAIN ************************************************************/ int main(void) { touch.fall(&ISR1); // attach address ISR to interrupt falling edge butt3.rise(&ISR2); // attach address ISR to interrupt rising edge init_usb(); //initialize the PC interface init_eth(); //initialize the Ethernet connection while(true) { //repeat forever switch (status) { case 0 : init_load(); //Display Program Loaded status -> Flash Blue send(); //Connect to server receive(); //Wait for START trigger from Server break; case 1 : //Start the Beep Test blue = 1; //Make sure Blue is OFF //2 second COUNTDOWN red, purple, blue, GO! red = 0; wait_ms(500); blue = 0; wait_ms(500); red = 1; wait_ms(500); blue = 1; status = 2; line = true; for (i=0; i<4; i++) { green = !green; wait_ms(250); } green = 0; wait(72/(level - 1)); //half(t_shuttle - 1) red = 0; wait(72/(level)); //half(t_shuttle) send(); red = 1; break; case 2 : //Wait for message receive(); if (line == false) { if (blue == 1) blue = 0; else { status = 3; //Stop the Beep Test break; } } //end if-statement line = true; //reset the line flag if (t_level.read() >= 60) { level++; //New level t_level.reset(); t_level.start();//New level - Restart timer for (i=0; i<4; i++) { //Flash green to indicate new level green = !green; wait_ms(250); } } //end if-statement red = 1; green = 0; //Display Solid green wait(144/(level+16)/2); //t_shuttle = 20*3600/(8000+500*level) red = 0; //Display solid Yellow wait(144/(level+16)/2); send(); //Send message to server green = 1; break; case 3 : //Stop the Beep Test, delay, then reload red = blue = 0; send(); //Send message to client //LED FLASHES PURPLE at 1HZ square waves for 2 minutes for (i=0; i<180; i++){ red = !red; blue = !blue; wait_ms(500); } status = 0; //Reset the Beep Test break; default : red = 0; green = 1; for (i=0; i<60; i++) { //FLASHING red green at 2Hz - status-error red = !red; green = !green; wait_ms(250); } return(0); } //End switch-statement }//End while-loop } //end main()