Here
Dependencies: Hexi_KW40Z Hexi_OLED_SSD1351 nRF24L01 FXOS8700
Diff: main.cpp
- Revision:
- 11:deecd2b72129
- Parent:
- 9:5e63a3928e43
- Child:
- 12:8db1b8fb5866
diff -r 5e63a3928e43 -r deecd2b72129 main.cpp --- 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; } -