Skeleton program for Federico's 4YP project.

Dependencies:   WebSocketClient WiflyInterface mbed messages

Fork of IoT_Ex by Damien Frost

Revision:
5:0c7d131e6089
Parent:
3:f20e114eb2ee
Child:
8:5afd599875e4
--- a/main.cpp	Tue Oct 04 16:52:21 2016 +0000
+++ b/main.cpp	Thu Oct 06 07:58:31 2016 +0000
@@ -1,3 +1,36 @@
+/**
+* @author Damien Frost
+*
+* @section LICENSE
+*
+*   Copyright (c) 2016 Damien Frost
+*
+*   Permission is hereby granted, free of charge, to any person obtaining a copy
+*   of this software and associated documentation files (the "Software"), to deal
+*   in the Software without restriction, including without limitation the rights
+*   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+*   copies of the Software, and to permit persons to whom the Software is
+*   furnished to do so, subject to the following conditions:
+*
+*   The above copyright notice and this permission notice shall be included in
+*   all copies or substantial portions of the Software.
+*
+*   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+*   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+*   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+*   AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+*   LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+*   OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+*   THE SOFTWARE.
+*
+* @file "main.cpp"
+*
+* @section DESCRIPTION
+*   Simple Internet of Things main program. The device sends data every 3
+*   seconds, and can receive data from a server.
+*
+*/
+
 #include "mbed.h"
 #include "globals.h"
 #include "WiflyInterface.h"
@@ -12,12 +45,13 @@
 #define FUNCNAME "IoT"
 #include "messages.h"
 
+
 // Main Loop!
 int main() {
     unsigned int wifi_cmd = NO_WIFI_CMD;
     float wifi_data = 0.0f;
-    unsigned int wifi_var = 0;
     unsigned int ADCRaw;
+    char msg[128];
     
     // Set the IoT ID:
     IoT_ID = 1;
@@ -30,17 +64,23 @@
     INFO("");
     INFO("Starting up...");
     INFO("CPU SystemCoreClock is %d Hz", SystemCoreClock); 
-        
+    
+    // Configure the ADC to sample the internal temperature sensor. You cannot
+    // use AnalogIn() unfortunately...
     ConfigureADC();
+    
+    // Connect to the wifi network. It will basically get stuck here until it
+    // connects to the network.
     SetupNetwork(5000);
+    
     // Configure the baud rate of the wifi shield:
+    // This will make our wireless transmissions much faster.
     ws.setBaud(115200);
     wait(0.5f);
     
-    
-    
-    char msg[128];
+    // Check to see we are connected to the network:
     if(IotStatus.CheckFlag(SF_WIRELESSCONNECTED)){
+        // Try to connect to the WebSocket server:
         sprintf(msg, "ws://%s:%d/ws", SERVER_IP, WS_PORT);
         ws.Initialize(msg);
         INFO("Connecting to Websocket Server on %s...", msg);
@@ -53,44 +93,40 @@
             IotStatus.ClearFlag(SF_SERVERCONNECTED);
             INFO("Could not connect to server, will try again later.");
             ReconnectAttempts++;
-            if(ReconnectAttempts > 5){
-                INFO("Failed after %d reconnect attempts. Resetting the Wifi Shield...", ReconnectAttempts);
-                SetupNetwork(1);
-                ReconnectAttempts = 0;
-            }
         }
     }
     
-    
+    // Start the display timer which will send data to the server every
+    // 3 seconds.
+    DisplayTimer.start();
     
-    DisplayTimer.start();
-    // Inifinite loop:
+    // Inifinite main loop:
     while(1) {
         
         // Process the wifi command:
         if(wifi_cmd > NO_WIFI_CMD){
-            switch(wifi_cmd){
-                case CHANGEVAR_WIFI_CMD:
-                    ModifyVariable(wifi_var, wifi_data);
-                    break;
-                default:
-                    break;
-            }
+            // Modify the desired variable:
+            ModifyVariable(wifi_cmd, wifi_data);
+            // Reset the command:
             wifi_cmd = NO_WIFI_CMD;
         }
         
         // Check for new wifi data:
         if((wifi_cmd == NO_WIFI_CMD)){
-            ReceiveNetworkData(&wifi_cmd, &wifi_var, &wifi_data);
+            ReceiveNetworkData(&wifi_cmd, &wifi_data);
         }
         
         // Send the network data every 3 seconds:
         if(DisplayTimer.read()>(3.0f)){
             // Sample the internal temperature sensor:
             STARTADCCONVERSION;
+            // Wait for the conversion to complete:
             while(!ADCCONVERSIONCOMPLETE);
+            // Save the raw value from the ADC:
             ADCRaw = ADC1->DR;
+            // Calculate the temperature using information from the datasheet:
             TempSensor = ((((float)ADCRaw)/ADC_MAX)*IT_VMAX - IT_V25)/IT_AVG_SLOPE + 25.0f;
+            // Output the result:
             DBG("TempSensor = %.5f", TempSensor);
             DBG("ADC1->DR = %d", ADCRaw);
             
@@ -104,7 +140,5 @@
             DisplayTimer.reset();
             
         }
-        
-       
-    }
-}
+    } // while(1)
+} // main()