Here

Dependencies:   Hexi_KW40Z Hexi_OLED_SSD1351 nRF24L01 FXOS8700

Revision:
11:deecd2b72129
Parent:
9:5e63a3928e43
Child:
12:8db1b8fb5866
--- a/main.cpp	Tue Mar 14 15:48:36 2017 +0000
+++ b/main.cpp	Tue Mar 14 17:44:20 2017 +0000
@@ -17,10 +17,11 @@
 
 void StartHaptic(void);
 void StopHaptic(void const *n);
-void txTask(void);
+void txTask(void);//?
 void accelero(void);
 void drawAccel(void);
 void displayHome();
+void displayTimer();
 void screenHandler(uint8_t screen);
 
 DigitalOut redLed(LED1,1);
@@ -28,20 +29,20 @@
 DigitalOut blueLed(LED3,1);
 DigitalOut haptic(PTB9);
 
-// Define timer for haptic feedback  
+// Define timer for haptic feedback
 RtosTimer hapticTimer(StopHaptic, osTimerOnce);
-//   
+//
 FXOS8700 accel(PTC11, PTC10);
-// Instantiate the Hexi KW40Z Driver (UART TX, UART RX)  
+// Instantiate the Hexi KW40Z Driver (UART TX, UART RX)
 KW40Z kw40z_device(PTE24, PTE25);
 Serial pc(USBTX, USBRX); // Serial interface
-// Instantiate the SSD1351 OLED Driver  
-SSD1351 oled(PTB22,PTB21,PTC13,PTB20,PTE6, PTD15); // (MOSI,SCLK,POWER,CS,RST,DC)  
+// Instantiate the SSD1351 OLED Driver
+SSD1351 oled(PTB22,PTB21,PTC13,PTB20,PTE6, PTD15); // (MOSI,SCLK,POWER,CS,RST,DC)
 oled_text_properties_t textProperties = {0};
-// Instantiate the nRF24L01P Driver  
+// Instantiate the nRF24L01P Driver
 nRF24L01P my_nrf24l01p(PTC6,PTC7,PTC5,PTC4,PTB2,NC);    // mosi, miso, sck, csn, ce, irq
 
-// Text Buffer  
+// Text Buffer
 char text1[20]; // Text Buffer for dynamic value displayed
 char text2[20]; // Text Buffer for dynamic value displayed
 char text3[20]; // Text Buffer for dynamic value displayed
@@ -49,6 +50,7 @@
 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;
@@ -56,7 +58,7 @@
 char rxData[TRANSFER_SIZE];
 char txData[TRANSFER_SIZE];
 
-// Pointer for the image to be displayed   
+// 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;
@@ -66,8 +68,8 @@
 const uint8_t  *AlertBMP = Alert_bmp;
 
 
-//***************************Call Back Functions****************************** 
-//Enter Button  
+//***************************Call Back Functions******************************
+//Enter Button
 void ButtonRight(void)
 {
     // All screens other than 1 have either and enter button
@@ -96,6 +98,10 @@
                 screenNum = 0;
                 break;
             }
+            case 6: {
+                screenNum = 0;
+                break;
+            }
             default: {
                 break;
             }
@@ -104,11 +110,11 @@
     }
 }
 
-//Back Button  
+//Back Button
 void ButtonLeft(void)
 {
+    StartHaptic();
     if(screenNum > 0) {
-        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) {
@@ -116,17 +122,15 @@
             accelerometer = false;
         } else {
             screenNum--;
-        } screenHandler(screenNum);
+        }
+    } else {
+        screenNum = 6;
     }
-    else{
-        
-        screenHandler(6);
-        
-        }
+    screenHandler(screenNum);
 }
 
 //Advances to Heartrate only when user
-//is on Hexisafe screen  
+//is on Hexisafe screen
 void ButtonUp(void)
 {
     if (screenNum == 1) {
@@ -139,7 +143,7 @@
 }
 
 //Advances to Fall Detection only when user
-//is on Hexisafe screen  
+//is on Hexisafe screen
 void ButtonDown(void)
 {
     if (screenNum == 1) {
@@ -151,42 +155,50 @@
 }
 
 
-//**********************End of Call Back Functions**************************** 
+//**********************End of Call Back Functions****************************
 
-//*******************************Main***************************************** 
+//*******************************Main*****************************************
 
 int main()
 {
-    // Wait Sequence in the beginning for board to be reset then placed in mini docking station 
+    // Wait Sequence in the beginning for board to be reset then placed in mini docking station
     blueLed=1;
-
+    accel.accel_config();
+    //oled.DrawImage(FallPageBMP,0,0);
+    int count = 0;// count data reading for accelerometer
 
 
-    // Get OLED Class Default Text Properties  
+    // Get OLED Class Default Text Properties
     oled.GetTextProperties(&textProperties);
 
-    // Register callbacks to application functions  
+    // Register callbacks to application functions
     kw40z_device.attach_buttonLeft(&ButtonLeft);
     kw40z_device.attach_buttonRight(&ButtonRight);
     kw40z_device.attach_buttonUp(&ButtonUp);
     kw40z_device.attach_buttonDown(&ButtonDown);
 
-    // Change font color to white  
+    // Change font color to white
     textProperties.fontColor   = COLOR_WHITE;
     textProperties.alignParam = OLED_TEXT_ALIGN_CENTER;
     oled.SetTextProperties(&textProperties);
 
-    //Displays the Home Screen 
+    //Displays the Home Screen
     displayHome();
 
     while (true) {
-        accelero();
-        redLed = 1 ;
-        Thread::wait(50);
+        accel.acquire_accel_data_g(accel_data);
+        accel_rms = sqrt(((accel_data[0]*accel_data[0])+(accel_data[1]*accel_data[1])+(accel_data[2]*accel_data[2]))/3);
+        printf("%i %4.2f\n\r",count,accel_rms);
+        count++;
+        wait(0.01);
+        if(screenNum == 5) {
+            //drawAccel(); need to fix timing issue
+        }
+        Thread::wait(300);
     }
 }
 
-//*****************************End of Main************************************ 
+//*****************************End of Main************************************
 //Intiates Vibration
 void StartHaptic(void)
 {
@@ -236,13 +248,16 @@
         }
         case 5: {
             //Switching to FallPageBMP
-            drawAccel();
+            oled.DrawImage(FallPageBMP,0,0);
             break;
         }
         case 6: {
             //AlertNotification
             oled.DrawImage(AlertBMP,0,0);
-            }
+            wait(5);
+            displayTimer();
+            break;
+        }
         default: {
             break;
         }
@@ -254,83 +269,75 @@
 
 }
 
-void accelero(void) {
-    
-    // Configure Accelerometer FXOS8700, Magnetometer FXOS8700
-    accel.accel_config();
-    //oled.DrawImage(FallPageBMP,0,0);
-    int count = 0;// count data reading for accelerometer
-    // Fill 96px by 96px Screen with 96px by 96px Image starting at x=0,y=0
-    while (1) {
+void drawAccel(void)
+{
+    ax = accel_data[0];
+    ay = accel_data[1];
+    az = accel_data[2];
+    // Get OLED Class Default Text Properties
+    oled_text_properties_t textProperties = {0};
+    oled.GetTextProperties(&textProperties);
 
-        accel.acquire_accel_data_g(accel_data);
-        accel_rms = sqrt(((accel_data[0]*accel_data[0])+(accel_data[1]*accel_data[1])+(accel_data[2]*accel_data[2]))/3);
-        printf("%i %4.2f\n\r",count,accel_rms);
-        count++;
-        wait(0.01);
-        greenLed = !greenLed ;
-        Thread::wait(200);
-    }
-}
+    // Set text properties to white and right aligned for the dynamic text
+    textProperties.fontColor = COLOR_BLUE;
+    textProperties.alignParam = OLED_TEXT_ALIGN_LEFT;
+    oled.SetTextProperties(&textProperties);
 
-void drawAccel(void){
-            
-            
-             oled.DrawImage(FallPageBMP,0,0); 
-             while(true){   
-             ax = accel_data[0];
-             ay = accel_data[1];
-             az = accel_data[2];
-                   // Get OLED Class Default Text Properties
-             oled_text_properties_t textProperties = {0};
-             oled.GetTextProperties(&textProperties);
+    // Display Legends
+    strcpy((char *) text1,"X-Axis (g):");
+    oled.Label((uint8_t *)text1,5,26);
+
+    // Format the value
+    sprintf(text1,"%4.2f",ax);
+    // Display time reading in 35px by 15px textbox at(x=55, y=40)
+    oled.TextBox((uint8_t *)text1,70,26,20,15); //Increase textbox for more digits
 
-             // Set text properties to white and right aligned for the dynamic text
-             textProperties.fontColor = COLOR_BLUE;
-             textProperties.alignParam = OLED_TEXT_ALIGN_LEFT;
-             oled.SetTextProperties(&textProperties);
+    // Set text properties to white and right aligned for the dynamic text
+    textProperties.fontColor = COLOR_GREEN;
+    textProperties.alignParam = OLED_TEXT_ALIGN_LEFT;
+    oled.SetTextProperties(&textProperties);
 
-             // Display Legends
-             strcpy((char *) text1,"X-Axis (g):");
-             oled.Label((uint8_t *)text1,5,26);
+    // Display Legends
+    strcpy((char *) text2,"Y-Axis (g):");
+    oled.Label((uint8_t *)text2,5,43);
 
-             // Format the value
-             sprintf(text1,"%4.2f",ax);
-             // Display time reading in 35px by 15px textbox at(x=55, y=40)
-             oled.TextBox((uint8_t *)text1,70,26,20,15); //Increase textbox for more digits
+    // Format the value
+    sprintf(text2,"%4.2f",ay);
+    // Display time reading in 35px by 15px textbox at(x=55, y=40)
+    oled.TextBox((uint8_t *)text2,70,43,20,15); //Increase textbox for more digits
 
-             // Set text properties to white and right aligned for the dynamic text
-             textProperties.fontColor = COLOR_GREEN;
-             textProperties.alignParam = OLED_TEXT_ALIGN_LEFT;
-             oled.SetTextProperties(&textProperties);
+    // Set text properties to white and right aligned for the dynamic text
+    textProperties.fontColor = COLOR_RED;
+    textProperties.alignParam = OLED_TEXT_ALIGN_LEFT;
+    oled.SetTextProperties(&textProperties);
 
-             // Display Legends
-             strcpy((char *) text2,"Y-Axis (g):");
-             oled.Label((uint8_t *)text2,5,43);
+    // Display Legends
+    strcpy((char *) text3,"Z-Axis (g):");
+    oled.Label((uint8_t *)text3,5,60);
 
-             // Format the value
-             sprintf(text2,"%4.2f",ay);
-             // Display time reading in 35px by 15px textbox at(x=55, y=40)
-             oled.TextBox((uint8_t *)text2,70,43,20,15); //Increase textbox for more digits
+    // Format the value
+    sprintf(text3,"%4.2f",az);
+    // Display time reading in 35px by 15px textbox at(x=55, y=40)
+    oled.TextBox((uint8_t *)text3,70,60,20,15); //Increase textbox for more digits
 
-             // Set text properties to white and right aligned for the dynamic text
-             textProperties.fontColor = COLOR_RED;
-             textProperties.alignParam = OLED_TEXT_ALIGN_LEFT;
-             oled.SetTextProperties(&textProperties);
-
-             // Display Legends
-             strcpy((char *) text3,"Z-Axis (g):");
-             oled.Label((uint8_t *)text3,5,60);
+}
+void displayTimer()
+{
+    timer = 30;
+    while(timer>0) {
+        oled.FillScreen(COLOR_BLACK);
+        // Set text properties to white and right aligned for the dynamic text
+        textProperties.fontColor = COLOR_RED;
+        textProperties.alignParam = OLED_TEXT_ALIGN_CENTER;
+        oled.SetTextProperties(&textProperties);
 
-             // Format the value
-             sprintf(text3,"%4.2f",az);
-             // Display time reading in 35px by 15px textbox at(x=55, y=40)
-             oled.TextBox((uint8_t *)text3,70,60,20,15); //Increase textbox for more digits
-
-     Thread::wait(200);  
-       
+        // Format the value
+        sprintf(text3,"%i",timer);
+        // Display time reading in 35px by 15px textbox at(x=55, y=40)
+        oled.TextBox((uint8_t *)text3,48,48,20,15); //Increase textbox for more digits
+        timer--;
+        wait(1);
     }
-    
-    
+    displayHome();
+    screenNum = 0;
 }
-