Here

Dependencies:   Hexi_KW40Z Hexi_OLED_SSD1351 nRF24L01 FXOS8700

Revision:
15:77b6655d401b
Parent:
12:8db1b8fb5866
--- a/main.cpp	Mon Apr 10 16:46:59 2017 +0000
+++ b/main.cpp	Mon Apr 10 22:06:57 2017 +0000
@@ -8,6 +8,7 @@
 #include "string.h"
 #include "images.h"
 
+
 #define NAME    "RB"
 
 #define LED_ON      0
@@ -21,7 +22,7 @@
 void accelero(void);
 void drawAccel(void);
 void displayHome();
-void screenHandler(uint8_t screen);
+
 
 
 DigitalOut redLed(LED1,1);
@@ -44,7 +45,6 @@
 /*Create a Thread to handle sending BLE Sensor Data */
 Thread txThread;
 
-
 // Text Buffer
 char text1[20]; // Text Buffer for dynamic value displayed
 char text2[20]; // Text Buffer for dynamic value displayed
@@ -53,18 +53,17 @@
 
 float accel_data[3]; // Storage for the data from the sensor
 float accel_rms=0.0; // RMS value from the sensor
-float ax, ay, az; // Integer value from the sensor to be displayed
-uint8_t timer = 30;
 uint8_t screenNum=0;
 bool prefix=0;
-bool accelerometer = false;
+bool alert = false;
+uint8_t previous;
+bool trigger = false;
 bool sentMessageDisplayedFlag=0;
 char rxData[TRANSFER_SIZE];
 char txData[TRANSFER_SIZE];
 int16_t x=0,y=0,z=0;
 
 // Pointer for the image to be displayed
-const uint8_t *SafeBMP = HexiSafe96_bmp;
 const uint8_t *HeartBMP = HeartRate_bmp;
 const uint8_t *FallBMP = FallDet_bmp;
 const uint8_t *FallPageBMP = FallDetPage_bmp;
@@ -78,69 +77,60 @@
 {
     // All screens other than 1 have either and enter button
     // or a home buttom.
-    if(screenNum != 1) {
+    if(screenNum != 0) {
         StartHaptic();
         switch(screenNum) {
-            case 0: {
-                screenNum++;
-                screenHandler(screenNum);
+            case 1: {
+                screenNum = screenNum + 2;
+
                 break;
             }
             case 2: {
                 screenNum = screenNum + 2;
-                screenHandler(screenNum);
+                trigger = true;
                 break;
             }
-            case 3: {
-                screenNum = screenNum + 2;
-                screenHandler(screenNum);
-                break;
-            }
-            case 4:
-            case 5: {
-                accelerometer = false;
+            case 3:
+            case 4: {
                 screenNum = 0;
                 break;
             }
-            case 6: {
-                screenNum = 0;
+            case 5: {
+                screenNum = previous;
+                alert = false;
                 break;
             }
             default: {
                 break;
             }
         }
-        screenHandler(screenNum);
     }
 }
 
 //Back Button
 void ButtonLeft(void)
 {
-    StartHaptic();
-    if(screenNum > 0) {
+ 
+    if(screenNum > 0 && screenNum != 5) {
+        StartHaptic();
         //Allow user to go back to correct screen based on srceen number
-        //Refer to screenHandler for screen numbers
-        if(screenNum == 3 || screenNum == 4 || screenNum == 5) {
+        if(screenNum == 2 || screenNum == 3 || screenNum == 4) {
             screenNum = screenNum - 2;
-            accelerometer = false;
         } else {
             screenNum--;
         }
     } else {
-        screenNum = 6;
+        screenNum = 5;
     }
-    screenHandler(screenNum);
 }
 
 //Advances to Heartrate only when user
 //is on Hexisafe screen
 void ButtonUp(void)
 {
-    if (screenNum == 1) {
+    if (screenNum == 0) {
         StartHaptic();
         screenNum++;
-        screenHandler(screenNum);
     }
 
 
@@ -150,10 +140,10 @@
 //is on Hexisafe screen
 void ButtonDown(void)
 {
-    if (screenNum == 1) {
+    if (screenNum == 0) {
         StartHaptic();
         screenNum= screenNum + 2;
-        screenHandler(screenNum);
+
     }
 
 }
@@ -189,6 +179,9 @@
     kw40z_device.attach_buttonDown(&ButtonDown);
     oled_text_properties_t textProperties = {0};
     oled.SetTextProperties(&textProperties);
+    
+    uint8_t num = 0;
+    displayHome();
 
     //Passcode
     kw40z_device.attach_passkey(&PassKey);
@@ -197,11 +190,7 @@
     textProperties.fontColor   = COLOR_WHITE;
     textProperties.alignParam = OLED_TEXT_ALIGN_CENTER;
 
-    //txThread.start(txTask); /*Start transmitting Sensor Tag Data */
-
-    //Displays the Home Screen
-    displayHome();
-    //bool trigger = 0;
+    txThread.start(txTask); /*Start transmitting Sensor Tag Data */
 
     while (true) {
         accel.acquire_accel_data_g(accel_data);
@@ -209,11 +198,62 @@
         x = accel_data[0] *10000;
         y = accel_data[1] *10000;
         z = accel_data[2] *10000;
-        printf("x = %4.4f y = %4.4f z = %4.4f\n\rx = %i y = %i z = %i\n\r",accel_data[0],accel_data[1],accel_data[2],x,y,z);
-        if(screenNum == 5) {
-            drawAccel();
+        printf("Screen = %i Num = %i alert = %d\n\r %i\n\r",screenNum,num,alert,x);
+        if(accel_rms*10 > 12.4)
+        {
+            oled.DrawImage(AlertBMP,0,0);
+            previous = screenNum;
+            num = screenNum - 1;
+            screenNum = 5;
+            alert = true;
         }
-        Thread::wait(300);
+        if((screenNum != num && alert == false) || screenNum == 4) {
+            switch(screenNum) {
+                case 0: {
+                    displayHome();
+                    num = screenNum;
+                    break;
+                }
+                case 1: {
+                    //Switching to HeartBMP
+                    oled.DrawImage(HeartBMP,0,0);
+                    num = screenNum;
+                    break;
+                }
+                case 2: {
+                    //Switching to FallBMP
+                    oled.DrawImage(FallBMP,0,0);
+                    num = screenNum;
+                    break;
+                }
+                case 3: {
+                    //Switching to HeartPageBMP
+                    oled.DrawImage(HeartPageBMP,0,0);
+                    num = screenNum;
+                    break;
+                }
+                case 4: {
+                    //Switching to FallPageBMP
+                    if(trigger == true) {
+                        oled.DrawBox (23,18,50 ,50 , COLOR_BLACK);
+                        trigger = false;
+                    }
+                    drawAccel();
+                    num = screenNum;
+                    break;
+                }
+                case 5: {
+                    //Switching to alarm
+                    oled.DrawImage(AlertBMP,0,0);
+                    num = screenNum;
+                    break;
+                }
+                default: {
+                    break;
+                }
+            }
+        }
+        Thread::wait(100);
     }
 
 
@@ -238,56 +278,6 @@
     oled.DrawImage(HomeBMP,0,0);
 }
 
-
-void screenHandler(uint8_t screen)
-{
-    //Switching screens
-    switch(screen) {
-        case 0: {
-            displayHome();
-            break;
-        }
-        case 1: {
-            //Switching to SafeBMP
-            oled.DrawImage(SafeBMP,0,0);
-            break;
-        }
-        case 2: {
-            //Switching to HeartBMP
-            oled.DrawImage(HeartBMP,0,0);
-            break;
-        }
-        case 3: {
-            //Switching to FallBMP
-            oled.DrawImage(FallBMP,0,0);
-            break;
-        }
-        case 4: {
-            //Switching to HeartPageBMP
-            oled.DrawImage(HeartPageBMP,0,0);
-            break;
-        }
-        case 5: {
-            //Switching to FallPageBMP
-            oled.DrawBox (23,18,50 ,50 , COLOR_BLACK);
-            break;
-        }
-        case 6: {
-            //Switching to alarm
-            oled.DrawImage(AlertBMP,0,0);
-            break;
-        }
-        default: {
-            break;
-        }
-    }
-
-
-    //Append Initials to txData[2:3].
-    //strcat(txData,NAME);
-
-}
-
 void drawAccel(void)
 {
 
@@ -324,14 +314,12 @@
 // txTask() transmits the sensor data
 void txTask(void)
 {
-
     while (true) {
-
         //UpdateSensorData();
         kw40z_device.SendSetApplicationMode(GUI_CURRENT_APP_SENSOR_TAG);
-
         //Send Accel Data.
         kw40z_device.SendAccel(x,y,z);
+        Thread::wait(1000);
     }
 }