wave cancel

Dependencies:   4DGL-uLCD-SE EthernetInterface HTTPClient NTPClient PinDetect SDFileSystem mbed-rtos mbed wave_player

Fork of 4180_Final_Project by Adam Zuravleff

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);