Part 1 of our ECE 4180 Final Project
Dependencies: 4DGL-uLCD-SE EthernetInterface MODSERIAL NTPClient mbed-rtos mbed
main.cpp
- Committer:
- mohit1234
- Date:
- 2015-05-01
- Revision:
- 0:9fa2874be5e4
File content as of revision 0:9fa2874be5e4:
#include <string> #include "mbed.h" #include "uLCD_4DGL.h" #include "EthernetInterface.h" #include "rtos.h" #include "alarm.h" #include <sstream> #include "weather.h" #include "NTPClient.h" #define MODSERIAL_DEFAULT_RX_BUFFER_SIZE 512 #define MODSERIAL_DEFAULT_TX_BUFFER_SIZE 1024 #include "MODSERIAL.h" MODSERIAL device(p13,p14); NTPClient ntp; time_t ctTime; EthernetInterface eth; AnalogIn tempSensor(p15); uLCD_4DGL screen1(p28, p27, p11); uLCD_4DGL screen2(p9, p10, p11); Mutex mutex1; Mutex mutex2; float prevTempC; float prevTempF; float tempC; float tempF; float getTempC() { return ((tempSensor*3.3)-0.600)*100.0; } float getTempF() { return (9.0*getTempC()/5.0) + 32.0; } string getTime() { char buffer[80]; ctTime = time(NULL); struct tm * timeinfo; timeinfo = localtime(&ctTime); timeinfo->tm_hour = (timeinfo->tm_hour - 4)%24; strftime(buffer,80,"%I:%M\n",timeinfo); return string(buffer); } string getDate() { char buffer[80]; ctTime = time(NULL); struct tm * timeinfo; timeinfo = localtime(&ctTime); strftime(buffer,80,"%A, %B %d\n",timeinfo); return string(buffer); } weatherInfo prevWeather; void tempThread(void const *args) { mutex1.lock(); screen1.cls(); screen1.color(GREEN); screen1.printf("The indoor\ntemperature is:\n"); mutex1.unlock(); while (1) { tempC = getTempC(); tempF = getTempF(); mutex1.lock(); screen1.locate(0, 2); screen1.color(BLACK); screen1.printf("%.0fC/%.0fF", prevTempC, prevTempF); screen1.locate(0, 2); screen1.color(GREEN); screen1.printf("%.0fC/%.0fF", tempC, tempF); screen1.locate(0,6); screen1.color(BLACK); screen1.printf("Weather in %s\n", prevWeather.zipcode); screen1.printf("%.0fC/%.0fF\n", prevWeather.tempC, prevWeather.tempF); screen1.printf("%s\n", prevWeather.condition); screen1.printf("%.2fkmh/%.2fmih\n", prevWeather.windSpeedKm, prevWeather.windSpeedMi); prevWeather = getWeatherInfo(); screen1.locate(0,6); screen1.color(GREEN); screen1.printf("Weather in %s\n", prevWeather.zipcode); screen1.printf("%.0fC/%.0fF\n", prevWeather.tempC, prevWeather.tempF); screen1.printf("%s\n", prevWeather.condition); screen1.printf("%.2fkph/%.2fmph\n", prevWeather.windSpeedKm, prevWeather.windSpeedMi); mutex1.unlock(); prevTempC = tempC; prevTempF = tempF; Thread::wait(6*1000); } } string prevTime; void displayTime(void const* args) { mutex1.lock(); screen2.cls(); screen2.locate(0,3); screen2.color(WHITE); screen2.printf("%s", getDate()); prevTime = getTime(); mutex1.unlock(); while (1) { mutex1.lock(); screen2.locate(0,0); screen2.color(BLACK); screen2.text_width(3); screen2.text_height(3); screen2.printf("%s", prevTime); screen2.locate(0,0); screen2.color(WHITE); screen2.printf("%s", getTime()); prevTime = getTime(); mutex1.unlock(); Thread::wait(5000); } } void displayRedditFeed(void const* args) { while (1) { TCPSocketConnection sock; sock.connect("ece4180.cloudapp.net", 80); //sock.connect("google.com", 80); char http_cmd[] = "GET /reddit/index.php HTTP/1.0\n\n"; sock.send_all(http_cmd, sizeof(http_cmd)-1); char buffer[1000]; int ret; while (true) { ret = sock.receive(buffer, sizeof(buffer)-1); if (ret <= 0) break; buffer[ret] = '\0'; } sock.close(); string all(buffer); all = all.substr(all.find("\r\n\r\n")+4); mutex1.lock(); screen2.cls(); screen2.printf("%s\n", all); mutex1.unlock(); Thread::wait(5*1000); } } void setupScreens() { screen1.baudrate(3000000); screen1.cls(); screen2.baudrate(3000000); screen2.cls(); } void setupEthernet() { eth.init(); //Use DHCP eth.connect(); //printf("Mac Address: %s\n", eth.getMACAddress()); //printf("IP Address is %s\n", eth.getIPAddress()); } void setupTime() { if (ntp.setTime("nist1-macon.macon.ga.us") == 0) { printf("Set time successfully\r\n"); ctTime = time(NULL); printf("Time is set to (UTC): %s\r\n", ctime(&ctTime)); } else { printf("Error in getting time\r\n"); } } void setupWeather() { prevWeather = getWeatherInfo(); } int main() { mutex1.lock(); setupScreens(); screen1.color(RED); screen1.printf("Setting Up LCDs\nPlease wait..."); screen2.color(RED); screen2.printf("Setting Up LAN\nPlease wait..."); mutex1.unlock(); setupEthernet(); setupTime(); setupWeather(); mutex1.lock(); screen1.cls(); screen2.cls(); mutex1.unlock(); //Thread threadTime(displayTime); Thread threadTemp(tempThread); //Thread threadSerial(sendSerial); Thread redditThread(displayRedditFeed); while(1) { mutex1.lock(); if(device.readable()) { char buffer[80]; device.scanf("%s", buffer); if (buffer[0] == 'd') { device.printf("%s", getDate()); } if (buffer[0] == 't') { device.printf("%s", getTime()); } if (buffer[0] == 'a') { mutex1.lock(); device.printf("%s\n", isItAlarmTime(&ctTime)); mutex1.unlock(); } } mutex1.unlock(); wait_ms(1000); } }