Connections to Xively working; has 5 channels on Xively (axl_x, axl_y, axl_z, heater_status, temperature)

Dependencies:   C12832_lcd EthernetInterface LM75B MMA7660 NTPClient libxively mbed-rtos mbed

Revision:
3:3a48ed10d6fe
Parent:
2:cf992d90396e
Child:
4:05986b9ea330
--- a/main.cpp	Sun May 18 03:23:37 2014 +0000
+++ b/main.cpp	Sun May 18 03:50:03 2014 +0000
@@ -4,6 +4,7 @@
 #include "C12832_lcd.h"
 #include "LM75B.h"
 #include "MMA7660.h"
+#include "Websocket.h"
 
 #define PST_OFFSET  7*60*60
 
@@ -20,12 +21,12 @@
 AnalogIn pot2(p19);
 #define LOOP_DELAY_MS 100
 //update time every 10 minutes
-#define UPDATE_TIME 60*1 
+#define UPDATE_TIME 60*1
+MMA7660 acc(p28, p27);// accelerometer
+int updateTimeFromServer = 1;
 
-MMA7660 MMA(p28, p27);
-int updateTimeFromServer = 1;
-    
-void connectToTheInternet() {
+void connectToTheInternet()
+{
     eth.init(); //Init and use DHCP
     wait(2);
     lcd.cls();
@@ -42,7 +43,8 @@
     lcd.cls();
 }
 
-void updateTimeRoutine() {
+void updateTimeRoutine()
+{
     if (ntp.setTime("0.pool.ntp.org") == 0) {
         printf("Time updated!");
     } else {
@@ -53,20 +55,37 @@
     updateTimeFromServer = 0;
 }
 
-void updateTime() {
+void updateTime()
+{
     updateTimeFromServer = 1;
 }
 
+void sendTempJSON()
+{
+    char json_str[100];
+    // See the output on http://sockets.mbed.org/app-board/viewer
+    Websocket ws("ws://sockets.mbed.org:443/ws/app-board/wo");
+    ws.connect();
+    // create json string with acc/tmp data
+    sprintf(json_str, "{\"id\":\"app_board_eth_EW2013\",\"ax\":%d,\"ay\":%d,\"az\":%d, \"tmp\":%d}", (int)(acc.x()*360), (int)(acc.y()*360), (int)(acc.z()*360), (int)tmp.read());
+    // send str
+    ws.send(json_str);
+    ws.close();
+}
+
 //POT values are 0:1, will allow high and low temperatures
 //lets you set temp between 50 and 100 degrees
-void updateTempsFromPots() {
+void updateTempsFromPots()
+{
     float lowTempPot = pot2*50.0+50;
     float highTempPot = pot1*50.0+50;
     //round to the nearest whole number
     lowTempPot = floor(lowTempPot+.5);
     highTempPot = floor(highTempPot+.5);
     //high temp must be at least 1 degree above low temp
-    if (highTempPot <= lowTempPot) {highTempPot = lowTempPot +1;}
+    if (highTempPot <= lowTempPot) {
+        highTempPot = lowTempPot +1;
+    }
     //Refresh the display if the temps have changed by more than a degree
     if ((lowTemp != lowTempPot) || (highTemp != highTempPot)) {
         lowTemp = lowTempPot;
@@ -78,59 +97,61 @@
 }
 
 int main()
-{   
-    connectToTheInternet();    
+{
+    connectToTheInternet();
     //Variable to hold the current minute so we only update the display when the minute changes
     char currentMinute[2];
     currentMinute[1] = 'a';
     char minute[2];
- 
+
     float currentTemp = -200;
-    lcd.printf("Updating time...\r\n");   
-    printf("Updating time...\r\n");   
+    lcd.printf("Updating time...\r\n");
+    printf("Updating time...\r\n");
     if (ntp.setTime("0.pool.ntp.org") == 0) {
-        printf("Set time successfully\r\n");       
+        printf("Set time successfully\r\n");
         lcd.cls();
         timer.attach(&updateTime, UPDATE_TIME);
         lcd.printf("\n\r\n\rHEATER OFF");
-        
-        while(1) {              
+
+        while(1) {
             if(updateTimeFromServer) {
-                updateTimeRoutine();    
-            }      
+                updateTimeRoutine();
+            }
             //Sets temp from POTs
-            updateTempsFromPots();            
-            //Fetch the time 
+            updateTempsFromPots();
+            //Fetch the time
             time_t ctTime;
             ctTime = time(NULL)- PST_OFFSET;
-            char timeBuffer[32];  
-                     
+            char timeBuffer[32];
+
             //See if the minute has changed; set an update display flag if it has
-            strftime(minute, 8, "%M", localtime(&ctTime));           
-            if ( (minute[1] != currentMinute[1]) ) {         
+            strftime(minute, 8, "%M", localtime(&ctTime));
+            if ( (minute[1] != currentMinute[1]) ) {
                 //Formats the time for display
-                strftime(timeBuffer, 32, "%a %b %d %I:%M%p\n\r", localtime(&ctTime));           
+                strftime(timeBuffer, 32, "%a %b %d %I:%M%p\n\r", localtime(&ctTime));
                 printf("%s\r", timeBuffer);
                 lcd.locate(0,0);
                 lcd.printf("%s\r", timeBuffer);
                 currentMinute[1] = minute[1];
-            }          
-            
+            }
+
             //Update the temperature display if the temperature, set temp has changed
-            temp = tmp.read()*9.0/5.0 + 32.0;  
-            //checks if the temperature (rounded to the nearest whole number) has changed 
+            temp = tmp.read()*9.0/5.0 + 32.0;
+
+            //checks if the temperature (rounded to the nearest whole number) has changed
             if (floor(temp+.5) != floor(currentTemp+.5)) {
                 printf("Temp change: %.1f F\n\r", temp);
                 currentTemp = temp;
                 lcd.locate(0,0);
                 lcd.printf("\n\r%.1f LOW: %.0f HIGH: %.0f", temp, lowTemp, highTemp);
-            }   
-              
-            lcd.locate(0,0);             
+                sendTempJSON();
+            }
+
+            lcd.locate(0,0);
             //Heater logic: turns off if it has gone over the high temp, on if under the low temp
             if (heaterOn && (temp > highTemp) ) {
                 printf("Heater turned OFF\n\r");
-                heaterOn = 0; 
+                heaterOn = 0;
                 lcd.locate(0,0);
                 lcd.printf("\n\r\n\rHEATER OFF");
             } else if (!heaterOn && (temp < lowTemp) ) {
@@ -138,8 +159,8 @@
                 heaterOn = 1;
                 lcd.locate(0,0);
                 lcd.printf("\n\r\n\rHEATER ON");
-            }      
-            wait(LOOP_DELAY_MS*.001);                                
+            }
+            wait(LOOP_DELAY_MS*.001);
         }
     } else {
         lcd.printf("NTP Error\r\n");