Axeda Ready Demo for Freescale FRDM-KL46Z as accident alert system

Dependencies:   FRDM_MMA8451Q KL46Z-USBHost MAG3110 SocketModem TSI mbed FATFileSystem

Fork of AxedaGo-Freescal_FRDM-KL46Z by Axeda Corp

Revision:
0:65004368569c
Child:
1:5ad12c581db4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Tue Jul 01 21:31:54 2014 +0000
@@ -0,0 +1,192 @@
+#include "mbed.h"
+#include "MTSSerial.h"
+#include "Wifi.h"
+#include "TSISensor.h"
+#include "MMA8451Q.h"
+#include "MAG3110.h"
+#include "USBHostCam.h"
+#include "axToolkit.h"
+
+/*********************************************/
+/* In the following lines please input:      */
+/* on line 17: your serial number            */
+/* on line 18: your wifi SSID                */
+/* on line 19: your wifi password/key        */
+/* on line 20: your security type (WPA...    */
+/*********************************************/
+
+#define YOUR_SERIAL_NUM "your_serial_here_123"
+#define SSID "yourWifi"
+#define AP_Security "SECURITYKEYHERE"
+#define AP_Key WPA2             //security type examples: NONE, WEP64, WEP128, WPA, WPA2
+
+
+/*********************************************/
+/*Axeda connections                          */
+/*********************************************/
+
+#define MODEL           "Freescale46"                       //using Freescale as a placeholder
+#define SERVER_NAME     "toolbox-stage-connect.axeda.com" //IP = 216.34.120.53/52 stage/public URL=toolbox-stage-connect.axeda.com
+#define PORT_NUM        80
+
+
+using namespace mts;
+
+//Hardware Support Stuff
+// Include support for on-board green and red LEDs
+#define LED_ON  0
+#define LED_OFF 1
+
+DigitalOut greenLED(LED_GREEN);
+DigitalOut redLED(LED_RED);
+// Include support for onboard pushbuttons (value = 0 when pressed)
+DigitalIn  sw1(PTC3);
+DigitalIn  sw3(PTC12);
+TSISensor slider;
+AnalogIn  lightSense(PTE22);
+#define MMA8451_I2C_ADDRESS (0x1d<<1)
+MMA8451Q acc(PTE25, PTE24, MMA8451_I2C_ADDRESS);
+MAG3110 mag(PTE25, PTE24);
+//Camera support
+/*
+#if defined(TARGET_KL46Z)
+uint8_t image_buf[1024*24];
+#elif defined(TARGET_KL25Z)
+uint8_t image_buf[1024*12];
+#endif */
+
+
+int main()
+{
+    TSISensor touchSensor;
+    //float accels[3];
+    //float resting;
+    int SEVERITY;
+    //int HURT_BUTTON_STATE=0;
+    //int OK_BUTTON_STATE=0;
+    double status=0;
+    
+//Some light I/O setup:    
+    redLED=LED_OFF;
+    greenLED=LED_OFF; 
+// Turn on pull up resistors on pushbutton inputs
+    sw1.mode(PullUp);
+    sw3.mode(PullUp);
+
+//Setup the Camera: 
+ /*   int size=0;
+    USBHostCam* cam = new USBHostCam(_320x240);
+    if (!cam->connect()) {
+        error("WebCam not found.\n");
+        greenLED=LED_ON;
+        }
+    else { redLED=LED_ON; }  */
+     
+    //Set the network parameters
+    std::string ssid = SSID;
+    std::string securityKey = AP_Security;
+    Wifi::SecurityType securityType = Wifi::AP_Key;
+
+    //Wait for wifi module to boot up
+    for (int i = 10; i >= 0; i = i - 2) {
+        wait(2);
+        printf("Waiting %d seconds...\n\r", i);
+    }
+
+    //Setup serial interface to WiFi module
+    MTSSerial* serial = new MTSSerial(PTD3, PTD2, 256, 256);
+    serial->baud(9600);
+
+    //Setup Wifi class
+    Wifi* wifi = Wifi::getInstance();
+    printf("Init: %s\n\r", wifi->init(serial) ? "SUCCESS" : "FAILURE");
+    wifi->sendBasicCommand("set comm size 1460", 500, CR);
+    wifi->sendBasicCommand("set comm time 6000", 500, CR);
+  //  wifi->sendBasicCommand("set comm match "+EOT, 3, CR);
+    //Setup and check connection
+    printf("Set Network: %s\n\r", getCodeNames(wifi->setNetwork(ssid, securityType, securityKey)).c_str());
+    printf("Set DHCP: %s\n\r", getCodeNames(wifi->setDeviceIP("DHCP")).c_str());
+    while (! wifi->connect()) {
+        printf("Connect: Failure\r\n");
+        wait(1);
+    }
+    printf("Connected To Wifi!");
+    
+//Now we setup the Axeda Service:
+    ax_platform sbox;
+    ax_deviceID thisDevice;
+    ax_dataSet *ds[1];
+ //   ax_file pic;
+
+    ax_createPlatform(&sbox, SERVER_NAME, NULL, PORT_NUM); 
+    ax_data_createModelSerialDeviceId(&thisDevice, MODEL, YOUR_SERIAL_NUM, NULL);
+  //  ax_createFile(&pic, "mypic.jpg", "pic", sizeof(image_buf), (unsigned char*)&image_buf);       
+   
+    /*wait(0.7);
+    acc.getAccAllAxis( accels );
+    resting = abs(accels[0]) + abs(accels[1]) + abs(accels[2]);
+    printf("Set up resting accelerometer - %.2f\r\n", resting);
+    wait(0.1);*/
+ 
+    //Ping 
+    while (true) {
+        ds[0]=(ax_dataSet *)malloc(sizeof(ax_dataSet));
+        printf("\n\n\r ready \n\n");
+        SEVERITY=0; 
+        //ax_data_createSet(ds[0], 0, AX_NO_PRIORITY);     
+        //HURT_BUTTON_STATE=sw1.mode(PullUp);
+        //OK_BUTTON_STATE=sw3.mode(PullUp);
+        sw3.mode(PullUp);
+        sw1.mode(PullUp);
+        while(sw3&&sw1){
+            status=0;
+            greenLED=LED_ON;
+            wait(0.1);
+            greenLED=LED_OFF;
+            wait(0.1);
+                if (!sw3){
+                status=2;
+                }
+                    else{
+                        status=1;
+                    }
+            }  
+        
+        //SEND button push (hurt or ok)    
+        ax_data_addAnalogToSet(ds[0], "status", status);
+               
+        while(SEVERITY<=1){
+            SEVERITY=100*touchSensor.readPercentage();
+            redLED=LED_ON;
+            wait(0.1);
+            redLED=LED_OFF;
+            wait(0.1);
+            
+            }
+        
+        SEVERITY=100*touchSensor.readPercentage();
+
+        printf("\n\r%d\n",SEVERITY);
+        //Send data about severity (left to right position on touchpad)
+        ax_data_addAnalogToSet(ds[0], "severity",SEVERITY);    
+        
+        //Send data about orientation     
+
+        ax_data_addAnalogToSet(ds[0], "accel_x", acc.getAccX());
+        ax_data_addAnalogToSet(ds[0], "accel_y", acc.getAccY());
+        ax_data_addAnalogToSet(ds[0], "accel_z", acc.getAccZ());
+        
+        printf("\n\r%f\n", acc.getAccX());
+        printf("\n\r%f\n", acc.getAccY());
+        printf("\n\r%f\n", acc.getAccZ());
+    
+        ax_platform_sendData(&sbox, &thisDevice, ds, 1);
+        ax_data_destroySet(ds[0]);
+    /*
+        size = cam->readJPEG(image_buf, sizeof(image_buf));
+        ax_platform_upload(&sbox, &thisDevice, &pic);
+        */
+    //    printf("Ping Server: %s\n\r", wifi->ping("8.8.8.8") ? "Success" : "Failed");
+        wait(10);
+    }
+}