Here

Dependencies:   Hexi_KW40Z Hexi_OLED_SSD1351 nRF24L01 FXOS8700

Revision:
3:065e8a7824d4
Parent:
2:172492c41c48
Child:
5:09837d22b28f
--- a/main.cpp	Thu Mar 09 04:34:39 2017 +0000
+++ b/main.cpp	Thu Mar 09 20:33:10 2017 +0000
@@ -11,15 +11,15 @@
 
 #define LED_ON      0
 #define LED_OFF     1
-#define NUM_OF_SCREENS 6
+#define NUM_OF_SCREENS 4
 #define TRANSFER_SIZE   4
-   
+
 void StartHaptic(void);
 void StopHaptic(void const *n);
 void txTask(void);
 
-void displayHome();   
-void screenHandler(uint8_t stageNum,uint8_t header);
+void displayHome();
+void screenHandler(uint8_t screen);
 
 DigitalOut redLed(LED1,1);
 DigitalOut greenLed(LED2,1);
@@ -29,98 +29,111 @@
 /* Define timer for haptic feedback */
 RtosTimer hapticTimer(StopHaptic, osTimerOnce);
 
-/* Instantiate the Hexi KW40Z Driver (UART TX, UART RX) */ 
+/* Instantiate the Hexi KW40Z Driver (UART TX, UART RX) */
 KW40Z kw40z_device(PTE24, PTE25);
 
-/* Instantiate the SSD1351 OLED Driver */ 
+/* 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 */ 
-char text[20]; 
+/* Text Buffer */
+char text[20];
 
 uint8_t screenNum=0;
-bool prefix=0; 
+bool prefix=0;
 bool sentMessageDisplayedFlag=0;
 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;
+const uint8_t *FallPageBMP = FallDetPage_bmp;
+const uint8_t *HomeBMP = Home_bmp;
+const uint8_t *HeartPageBMP = HeartRatePage_bmp;
 
- 
-   
+
 /****************************Call Back Functions*******************************/
-/*Send Button */
+/*Enter Button */
 void ButtonRight(void)
 {
-    if (!sentMessageDisplayedFlag)
-    {
+    // All screens other than 1 have either and enter button 
+    // or a home buttom. 
+    if(screenNum != 1) {
         StartHaptic();
-    
-        // Send the transmitbuffer via the nRF24L01+
-        my_nrf24l01p.write( NRF24L01P_PIPE_P0,  txData, 4 );
+        switch(screenNum) {
+            case 0: {
+                screenNum++;
+                screenHandler(screenNum);
+                break;
+            }
+            case 2: {
+                screenNum = screenNum + 2;
+                screenHandler(screenNum);
+                break;
+            }
+            case 3: {
+                screenNum = screenNum + 2;
+                screenHandler(screenNum);
+                break;
+            }
+            case 4:
+            case 5: {
+                displayHome();
+                screenNum = 0;
+                break;
+            }
+            default: {
+                break;
+            }
+        }
     }
 }
 
-/*Home Button */
+/*Back Button */
 void ButtonLeft(void)
 {
-    StartHaptic();
-    screenNum = 0; 
-    
-    /*Turn off Green LED */
-    sentMessageDisplayedFlag=0;
-    greenLed = !sentMessageDisplayedFlag;
-    
-    /*Redraw Send Button*/
-   // oled.DrawImage(heartrateBMP,53,81);
-    //screenHandler(screenNum,prefix);
+    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) {
+            screenNum = screenNum - 2;
+        } else {
+            screenNum--;
+        }
+        screenHandler(screenNum);
+    }
+
 }
 
-/*Toggles Between I am @ and Meet @ */
+/*Advances to Heartrate only when user
+is on Hexisafe screen */
 void ButtonUp(void)
 {
-    if (screenNum !=0)
-    {
+    if (screenNum == 1) {
         StartHaptic();
-        
-        /*Turn off Green LED */
-        sentMessageDisplayedFlag=0;
-        greenLed = !sentMessageDisplayedFlag;
-        
-        /*Redraw Send Button*/
-      //  oled.DrawImage(heartrateBMP,53,81);
+        screenNum++;
+        screenHandler(screenNum);
+    }
 
-       // prefix = !prefix; 
-       // screenHandler(screenNum,prefix);
-    }
+
 }
 
-/*Advances Stage Number */
+/*Advances to Fall Detection only when user
+is on Hexisafe screen */
 void ButtonDown(void)
 {
-    StartHaptic();
-    
-    /*Turn off Green LED */
-    sentMessageDisplayedFlag=0;
-    greenLed = !sentMessageDisplayedFlag;
-    
-    /*Redraw Send Button*/
-    //oled.DrawImage(heartrateBMP,53,81);
-    
-    if (screenNum < NUM_OF_SCREENS -1) {
-        screenNum++;
+    if (screenNum == 1) {
+        StartHaptic();
+        screenNum= screenNum + 2;
+        screenHandler(screenNum);
     }
-    else
-    {   
-         screenNum = 0; 
-    }
-    
-    screenHandler(screenNum,prefix);
+
 }
 
 
@@ -129,14 +142,10 @@
 /********************************Main******************************************/
 
 int main()
-{    
-    /* Wait Sequence in the beginning for board to be reset then placed in mini docking station*/ 
-   
-    Thread::wait(6000);
-    blueLed=0;
-    Thread::wait(500);
+{
+    /* Wait Sequence in the beginning for board to be reset then placed in mini docking station*/
     blueLed=1;
-    
+
 
     /* NRF24l0p Setup */
     my_nrf24l01p.init();
@@ -148,52 +157,46 @@
     my_nrf24l01p.setTransferSize( TRANSFER_SIZE );
     my_nrf24l01p.setReceiveMode();
     my_nrf24l01p.enable();
-    
+
     /* Get OLED Class Default Text Properties */
-    oled.GetTextProperties(&textProperties);    
+    oled.GetTextProperties(&textProperties);
 
-    /* Fills the screen with solid black */         
+    /* Fills the screen with solid black */
     oled.FillScreen(COLOR_BLACK);
-        
+
     /* 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*/ 
-    displayHome();   
-     
-    /*Draw Home Button and Send Button*/  
-    oled.DrawImage(HexiSafe96_bmp,0,0);
-   
-    
 
-    while (true) 
-    {
-        
+    /*Displays the Home Screen*/
+    displayHome();
+
+    while (true) {
+
         // If we've received anything in the nRF24L01+...
         if ( my_nrf24l01p.readable() ) {
 
             // ...read the data into the receive buffer
             my_nrf24l01p.read( NRF24L01P_PIPE_P0, rxData, sizeof(rxData));
-            
-            //Set a flag that a message has been received 
+
+            //Set a flag that a message has been received
             sentMessageDisplayedFlag=1;
-            
-            //Turn on Green LED to indicate received message 
+
+            //Turn on Green LED to indicate received message
             greenLed = !sentMessageDisplayedFlag;
-            //Turn area black to get rid of Send Button 
+            //Turn area black to get rid of Send Button
             oled.DrawBox (53,81,43,15,COLOR_BLACK);
 
-     
+
             char name[7];
-            
+
             name[0] = rxData[2];
             name[1] = rxData[3];
             name[2] = ' ';
@@ -201,174 +204,124 @@
             name[4] = 'e';
             name[5] = 'n';
             name[6] = 't';
-            
+
             oled.TextBox((uint8_t *)name,0,20,95,18);
 
-            switch (rxData[0])
-            {
-                case 'M':
-                {
+            switch (rxData[0]) {
+                case 'M': {
                     oled.TextBox("Meet",0,35,95,18);
                     break;
                 }
-                case 'I':
-                {
+                case 'I': {
                     oled.TextBox(" ",0,35,95,18);
                     break;
                 }
 
-                default: {break;}
+                default: {
+                    break;
+                }
 
             }
 
-            switch (rxData[1])
-            {
-                case '0':
-                {
+            switch (rxData[1]) {
+                case '0': {
                     oled.TextBox("Where Yall?",0,50,95,18);
                     break;
                 }
-                case '1':
-                {
+                case '1': {
                     oled.TextBox("@ Stage 1",0,50,95,18);
                     break;
                 }
-                case '2':
-                {
+                case '2': {
                     oled.TextBox("@ Stage 2",0,50,95,18);
                     break;
                 }
-                case '3':
-                {
+                case '3': {
                     oled.TextBox("@ Stage 3",0,50,95,18);
                     break;
                 }
-                 case '4':
-                {
+                case '4': {
                     oled.TextBox("@ Stage 4",0,50,95,18);
                     break;
                 }
-                 case '5':
-                {
+                case '5': {
                     oled.TextBox("@ Stage 5",0,50,95,18);
                     break;
                 }
 
-                default:{break;}
+                default: {
+                    break;
+                }
             }
             StartHaptic();
         }
-        
-        
+
+
         Thread::wait(50);
     }
 }
 
 /******************************End of Main*************************************/
-
-void StartHaptic(void)  {
+//Intiates Vibration
+void StartHaptic(void)
+{
     hapticTimer.start(50);
     haptic = 1;
 }
 
-void StopHaptic(void const *n) {
+void StopHaptic(void const *n)
+{
     haptic = 0;
     hapticTimer.stop();
 }
 
-void displayHome(void)  
+void displayHome(void)
 {
-
-    oled.TextBox(" ",0,20,95,18);           //Line 1
-    oled.TextBox("Where",0,35,95,18);       //Line 2
-    oled.TextBox("Yall At?",0,50,95,18);    //Line 3    
-    strcpy(txData,"I");                     //Packet[0]
-    strcat(txData,"0");                     //Packet[1]
-    strcat(txData,NAME);                    //Packet[2:3]
-}  
+    oled.DrawImage(HomeBMP,0,0);
+}
 
 
-void screenHandler(uint8_t stageNum,uint8_t header)
+void screenHandler(uint8_t screen)
 {
-
-    //Text for Line 1
-    oled.TextBox(" ",0,20,95,18);
-
-    //Text for Line 2
-     switch(header)                  
-    {
-        case 0:
-        {
-            //Packet Encoding for I am @
-            strcpy(txData,"I");                 
-            oled.TextBox("I am",0,35,95,18);
+    //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 1:
-        {
-            //Packet Encoding for Meet @
-            strcpy(txData,"M");                 
-            oled.TextBox("Meet",0,35,95,18);
+        }
+        case 3: {
+            //Switching to FallBMP
+            oled.DrawImage(FallBMP,0,0);
             break;
-        }    
-        default:
-        {
+        }
+        case 4: {
+            //Switching to HeartPageBMP
+            oled.DrawImage(HeartPageBMP,0,0);
+            break;
+        }
+        case 5: {
+            //Switching to FallPageBMP
+            oled.DrawImage(FallPageBMP,0,0);
+            break;
+        }
+        default: {
             break;
         }
     }
 
-    //Text for Line 3
-        switch (stageNum)
-    {
-        case 0:
-        {
-            displayHome();
-            break;
-        }
 
-        case 1:
-        {
-            //Packet Encoding for Stage 1
-            strcat(txData,"1");
-            oled.TextBox("@ Stage 1",0,50,95,18);
-            break;
-        }
-        case 2:
-        {
-            //Packet Encoding for Stage 2
-            strcat(txData,"2");
-            oled.TextBox("@ Stage 2",0,50,95,18);
-            break;
-        }
-        case 3:
-        {
-            //Packet Encoding for Stage 3
-            strcat(txData,"3");
-            oled.TextBox("@ Stage 3",0,50,95,18);
-            break;
-        }
-        case 4:
-        {
-            //Packet Encoding for Stage 4
-            strcat(txData,"4");
-            oled.TextBox("@ Stage 4",0,50,95,18);
-            break;
-        }
-        case 5:
-        {
-            //Packet Encoding for Stage 5
-            strcat(txData,"5");
-            oled.TextBox("@ Stage 5",0,50,95,18);
-            break;
-        }
-        default:
-        {
-            break;
-        }
-    }
-    
-    //Append Initials to txData[2:3]. 
-    strcat(txData,NAME);
-   
+    //Append Initials to txData[2:3].
+    //strcat(txData,NAME);
+
 }