Code written by Paul Rabbat, Angel Daruna, Jarel Hawkins, and Cordel Williams
Dependencies: 4DGL-uLCD-SE EthernetInterface HTTPClient NTPClient PinDetect SDFileSystem mbed-rpc mbed-rtos mbed wave_player
Fork of ECE4180_FinalProject by
main.cpp
- Committer:
- prabbat3
- Date:
- 2014-11-15
- Revision:
- 0:0a99e3fc2a46
- Child:
- 1:d7f65be2640d
File content as of revision 0:0a99e3fc2a46:
// Includes #include "mbed.h" #include "NTPClient.h" #include "uLCD_4DGL.h" #include "EthernetInterface.h" #include <string> #include "mbed_rpc.h" #include "RPCCommand.h" #include "HTTPServer.h" #include "Formatter.h" #include "RequestHandler.h" #include "RPCType.h" #include "alarmContainer.h" // Defines #define SERVER_PORT 80 //HTTPSERVER // Global variables EthernetInterface eth; uLCD_4DGL uLCD(p28, p27, p29); // serial tx, serial rx, reset pin; NTPClient ntpClient; alarmModel _alarm; string dayOfWeek, month, dayNum, ampm; int hour, minute, sec; DigitalOut led1(LED1); DigitalOut led2(LED2); DigitalOut led3(LED3); DigitalOut led4(LED4); // Function prototypes HTTPServer create_simple_server(); HTTPServer create_interactive_server(); void parse(char[], int*, char*); void thread_server(void const *args); void thread_display(void const *args); void thread_alarm(void const *args); int main() { printf("Getting IP Address.. "); uLCD.baudrate(2000000); uLCD.cls(); uLCD.background_color(BLACK); uLCD.textbackground_color(BLACK); uLCD.locate(0,0); uLCD.color(BLUE); uLCD.text_height(2); uLCD.text_width(2); uLCD.printf("\n\nUniv Time\n Clock\n"); uLCD.text_height(1); uLCD.text_width(1); uLCD.printf(" Loading...\n"); uLCD.locate(0,0); if(eth.init()) { printf("Error while initializing the ethernet interface.\n"); return -1; } wait(5); if(eth.connect()) { printf("Error while starting the ethernet interface.\n"); return -1; } printf("IP Address is %s\n", eth.getIPAddress()); printf("Reading time..\n"); char* domainName="us.pool.ntp.org"; //SET TO DOMAIN NAME OF SERVER GETTING TIME FROM //GETS THE TIME FROM THE SERVER //setTime(DOMAIN_NAME,PORT_NUMBER,TIME_OUT) //DOMAIN_NAME= domain name //PORT NUMBER=port number (123 for NTP) //TIME_OUT= timeout value for request ntpClient.setTime(domainName,123,0x00005000); printf("Time set.\n"); Thread t1(thread_server); //start thread_server Thread t2(thread_display); Thread t3(thread_alarm); while(1){} } void thread_alarm(void const *args) { while(1){ if(_alarm.alarmSet){ led1 = 1; if(_alarm.hours == hour && _alarm.minutes == minute && _alarm.amPm == ampm){ led2 = 1; led3 = 1; led4 = 1; } } Thread::wait(100); } } void thread_display(void const *args){ time_t ctTime; //system time structure uLCD.cls(); uLCD.locate(0,0); uLCD.text_height(2); uLCD.text_width(1); char buffer[80]; //BUFFER TO HOLD FORMATTED TIME DATA uLCD.textbackground_color(BLACK); while (1) { uLCD.locate(0,0); uLCD.color(RED); // loop and periodically update the LCD's time display ctTime = time(NULL)-(3600*4); //TIME with offset for eastern time US //FORMAT TIME FOR DISPLAY AND STORE FORMATTED RESULT IN BUFFER strftime(buffer,80,"%a %b %d %T %p %z %Z",localtime(&ctTime)); int i=0; char* chars_array = strtok(buffer, " :"); //printf("Chars array: \n"); while(chars_array) { switch(i){ case 0: dayOfWeek = chars_array; break; case 1: month = chars_array; break; case 2: dayNum = chars_array; break; case 3: //chars_array = chars_array - 1; int hourTemp = atoi(chars_array); hourTemp--; //Daylight savings if(hourTemp > 12) hourTemp -= 12; hour = hourTemp; break; case 4: minute = atoi(chars_array); break; case 5: sec = atoi(chars_array); break; case 6: ampm = chars_array; break; } i++; chars_array = strtok(NULL, " :"); } if(minute < 10 && sec < 10){ uLCD.printf(" %s, %s %s\n %d:0%d:0%d %s", dayOfWeek, month, dayNum, hour, minute, sec, ampm); } else if(minute < 10){ uLCD.printf(" %s, %s %s\n %d:0%d:%d %s", dayOfWeek, month, dayNum, hour, minute, sec, ampm); } else if (sec < 10){ uLCD.printf(" %s, %s %s\n %d:%d:0%d %s", dayOfWeek, month, dayNum, hour, minute, sec, ampm); } else{ uLCD.printf(" %s, %s %s\n %d:%d:%d %s", dayOfWeek, month, dayNum, hour, minute, sec, ampm); } if(_alarm.alarmSet){ uLCD.color(GREEN); if(_alarm.minutes < 10){ uLCD.printf("\n\n Alarm:\n %d:0%d %s", _alarm.hours, _alarm.minutes, _alarm.amPm); } else{ uLCD.printf("\n\n Alarm:\n %d:%d %s", _alarm.hours, _alarm.minutes, _alarm.amPm); } } Thread::wait(100); } } void thread_server(void const *args) { RPCType::instance().register_types(); HTTPServer srv = create_interactive_server(); if(!srv.init(SERVER_PORT)) { eth.disconnect(); //return -1; printf("Thread 1 error.\n"); } srv.run(); } HTTPServer create_simple_server() { HTTPServer srv; srv.add_request_handler("DELETE", new DeleteRequestHandler()); srv.add_request_handler("GET", new GetRequestHandler()); srv.add_request_handler("PUT", new PutRequestHandler()); return srv; } HTTPServer create_interactive_server() { HTTPServer srv(new InteractiveHTMLFormatter()); srv.add_request_handler("GET", new ComplexRequestHandler()); return srv; } //SET FOR CSV FORMAT: NEEDS TO BE EDITED IF DIFFERENT FORMAT void parse(char buffer[], int *j, char *string) { //extracts next location string data item from buffer int i=0; for (i=0; i<=strlen(buffer); i++) { //TOTAL SIZE OF RETURNED DATA if ((buffer[*j+i] == ',')||(buffer[*j+i] == '\0' )) { //IF comma or end of string //comma is the string field delimiter string[i]=0; //SETS END OF SRTRING TO 0 *j=*j+i+1; //UPDATES to 1 after comma seperated value break; } else string[i]=buffer[*j+i]; //Keep adding to the string } }