wave cancel
Dependencies: 4DGL-uLCD-SE EthernetInterface HTTPClient NTPClient PinDetect SDFileSystem mbed-rtos mbed wave_player
Fork of 4180_Final_Project by
Diff: main.cpp
- Revision:
- 8:4750e5fd45c1
- Parent:
- 7:456add5c89e1
- Child:
- 9:fbb5f22fc299
--- a/main.cpp Fri Apr 22 18:09:13 2016 +0000 +++ b/main.cpp Sun Apr 24 18:13:23 2016 +0000 @@ -9,8 +9,11 @@ #include "uLCD_4DGL.h" #include "rtos.h" #include "PinDetect.h" +#include "HTTPClient.h" //pinouts +// Graphic LCD - TX, RX, and RES pins +uLCD_4DGL uLCD(p28,p27,p29); SDFileSystem sd(p11, p12, p13, p14, "sd"); //SD card AnalogOut DACout(p18); wave_player waver(&DACout); @@ -19,18 +22,17 @@ DigitalOut myled1(LED1); DigitalOut myled2(LED2); DigitalOut myled3(LED3); +//Mutex lcd_mutex; // Parameters -char* domain_name = "0.uk.pool.ntp.org"; +char* time_domain_name = "0.uk.pool.ntp.org"; +char* weth_domain_name = "https://query.yahooapis.com/v1/public/yql?q=select%20item.condition%20from%20weather.forecast%20where%20woeid%20in%20%28select%20woeid%20from%20geo.places%281%29%20where%20text%3D%22atlanta%2C%20ga%22%29&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys"; int port_number = 123; // Networking EthernetInterface eth; NTPClient ntp_client; -// Graphic LCD - TX, RX, and RES pins -uLCD_4DGL uLCD(p28,p27,p29); - #define snoozeTime 10 //global variables @@ -49,15 +51,72 @@ char time_buffer[80]; // Loop and update clock while (1) { + //lcd_mutex.lock(); uLCD.locate(0, 1); ct_time = time(NULL); strftime(time_buffer, 80, " %a %b %d\n %T %p %z\n %Z\n", \ localtime(&ct_time)); uLCD.printf(" UTC/GMT:\n%s", time_buffer); + //lcd_mutex.unlock(); Thread::wait(100); } } +void parseWeather(char* buf) +{ + char * pch; + char * key; + pch = strtok (buf,"{"); + while (pch != NULL) { + pch = strtok (NULL,"{"); + } + pch = strtok (buf,","); + while (pch != NULL) { + key = strtok (pch,":"); + if(strcmp(key, "\"text\"")) { + uLCD.printf("Condition = %s",pch); + } else if(strcmp(key, "\"temp\"")) { + uLCD.printf("temp = %s",pch); + } + } +} + +void getWeather() +{ + //lcd_mutex.lock(); + /*** WEATHER****/ + char buf[500]; + uLCD.printf("Getting weather..\n"); + HTTPClient http; + int retHttp = http.get(weth_domain_name, buf, sizeof(buf)); + uLCD.printf("%d", retHttp); + switch(retHttp) { + case HTTP_OK: + uLCD.printf("Read completely\n"); + uLCD.printf("%c",buf); + wait(2); + uLCD.printf("%s",buf); + wait(2); + parseWeather(buf); + break; + case HTTP_TIMEOUT: + uLCD.printf("Connection Timeout\n"); + break; + case HTTP_CONN: + uLCD.printf("Connection Error\n"); + break; + default: + uLCD.printf("Error\n"); + } + //lcd_mutex.unlock(); +} + +void weth_thread(void const *args) +{ + + Thread::wait(3600000); +} + //pushbutton (p19) void snooze_hit_callback (void) { @@ -129,10 +188,11 @@ } uLCD.printf("IP address is \n%s\n\n",eth.getIPAddress()); Thread::wait(1000); - + getWeather(); + wait(5); // Read time from server uLCD.printf("Reading time...\n\r"); - ntp_client.setTime(domain_name, port_number); + ntp_client.setTime(time_domain_name, port_number); uLCD.printf("Time set\n"); Thread::wait(2000); eth.disconnect(); @@ -144,7 +204,8 @@ uLCD.cls(); uLCD.text_height(2); - Thread thread_time(time_thread); + //Thread t1(time_thread); + //Thread t2(weth_thread); while(true) { timeCompare(); Thread::wait(100);