Health monitoring app
Dependencies: FXOS8700 HTU21D Hexi_KW40Z Hexi_OLED_SSD1351 Hexidraw
main.cpp
- Committer:
- Mariya
- Date:
- 2017-04-25
- Revision:
- 0:7f8127c43904
File content as of revision 0:7f8127c43904:
#include "mbed.h" #include "HTU21D.h" #include "FXOS8700.h" #include "Hexi_OLED_SSD1351.h" #include <stdlib.h> #include <time.h> //#include "images.h" #include "string.h" #include "math.h" //#include "Fever_Click.h" #include "Hexi_KW40Z.h" #include "hexidraw.h" //#include "MAX30101.h" //#include "heartRate_driver.h" #define LED_ON 0 #define LED_OFF 1 OLED oled1; DigitalOut redLed(LED1); DigitalOut greenLed(LED2); DigitalOut blueLed(LED3); DigitalOut haptic(PTB9); void StartHaptic(void); void StopHaptic(void const *n); // Pin connections //DigitalOut led1(LED_GREEN); // RGB LED Serial pc(USBTX, USBRX); // Serial interface HTU21D temphumid(PTB1,PTB0); // HTU21D Sensor DigitalOut powerEN (PTB12); // Power Enable HTU21D Sensor FXOS8700 accel(PTC11, PTC10); SSD1351 oled(PTB22,PTB21,PTC13,PTB20,PTE6, PTD15); // SSD1351 OLED Driver (MOSI,SCLK,POWER,CS,RST,DC) //MAX30101 heart(PTB1, PTB0); //I2C i2c(PTD9,PTD8); void ButtonUp(void); void ButtonDown(void); void ButtonRight(void); void ButtonLeft(void); void ButtonSlide(void); /* Define timer for haptic feedback */ RtosTimer hapticTimer(StopHaptic, osTimerOnce); /* Instantiate the Hexi KW40Z Driver (UART TX, UART RX) */ KW40Z kw40z_device(PTE24, PTE25); // Variables int sample_ftemp,flag=0,ped=0,oldped=0,cal=0,once=0; int sample_ctemp; int sample_ktemp; int sample_humid; float accel_data[3]; // Storage for the data from the sensor float accel_rms=0.0; // RMS value from the sensor float acc=0; float ax, ay, az;// temp; char text1[20]; const uint8_t *image1; // Pointer for the image to be displayed char text[20]; // Text Buffer for dynamic value displayed uint8_t data; uint8_t sample= rand() % 5 + 62; int main() { srand (time(NULL)); powerEN = 0; /* Setting pointer location of the 96 by 96 pixel bitmap */ //image1 = TempHumid; /* Turn on the backlight of the OLED Display */ // oled.DimScreenON(); /* Fill 96px by 96px Screen with 96px by 96px NXP Image starting at x=0,y=0 */ // oled.DrawImage(image1,0,0); oled.TextBox((uint8_t *)text,0,0,96,96); while(true) { kw40z_device.attach_buttonUp(&ButtonUp); kw40z_device.attach_buttonDown(&ButtonDown); kw40z_device.attach_buttonLeft(&ButtonLeft); kw40z_device.attach_buttonRight(&ButtonRight); kw40z_device.attach_buttonSlide(&ButtonSlide); sample_ftemp = temphumid.sample_ftemp()-30; printf("Temperature: %d F\n\r", sample_ftemp); sample_ctemp = temphumid.sample_ctemp(); printf("Temperature: %d C\n\r", sample_ctemp); sample_ktemp = temphumid.sample_ktemp(); printf("Temperature: %d K\n\r", sample_ktemp); sample_humid = temphumid.sample_humid(); printf("Humidity: %d %%\n\r", sample_humid); printf("\n\r"); 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("Accelerometer \tX-Axis %4.2f \tY-Axis %4.2f \tZ-Axis %4.2f \tRMS %4.2f\n\r",accel_data[0],accel_data[1],accel_data[2],accel_rms); wait(0.01); 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); /* textProperties.fontColor = COLOR_WHITE; textProperties.alignParam = OLED_TEXT_ALIGN_CENTER; oled.SetTextProperties(&textProperties); strcpy((char *) text,""); strcpy((char *) text,"ECE 595"); oled.Label((uint8_t *)text,0,0); strcpy((char *) text," FITNESS MONITOR"); oled.Label((uint8_t *)text,0,7); */ /* Set text properties to white and right aligned for the dynamic text */ textProperties.fontColor = COLOR_RED; textProperties.alignParam = OLED_TEXT_ALIGN_RIGHT; oled.SetTextProperties(&textProperties); if(sample_ftemp>70 && flag == 0) { textProperties.fontColor = COLOR_BLUE; textProperties.alignParam = OLED_TEXT_ALIGN_CENTER; oled.SetTextProperties(&textProperties); flag=1; strcpy((char *) text,"Cool clothes!"); oled.Label((uint8_t *)text,15,5); // sprintf(text,"%i",sample_ctemp); //oled.Label((uint8_t *)text,5,5); strcpy((char *) text,""); textProperties.fontColor = COLOR_RED; textProperties.alignParam = OLED_TEXT_ALIGN_RIGHT; oled.SetTextProperties(&textProperties); strcpy((char *) text,"Temp."); oled.Label((uint8_t *)text,5,67); /* Format the value */ sprintf(text,"%i",sample_ftemp); /* Display time reading in 35px by 15px textbox at(x=55, y=40) */ oled.TextBox((uint8_t *)text,57,67,20,15); //Increase textbox for more digits /* Display Units */ strcpy((char *) text,"dF"); oled.Label((uint8_t *)text,82,67); wait(5); //oled1.clear(BLACK); oled.TextBox((uint8_t *)text,0,0,96,96); } else if(sample_ftemp<60 && flag == 0) { textProperties.fontColor = COLOR_RED; textProperties.alignParam = OLED_TEXT_ALIGN_CENTER; oled.SetTextProperties(&textProperties); flag=1; strcpy((char *) text,"Warm clothes!"); oled.Label((uint8_t *)text,15,5); // sprintf(text,"%i",sample_ctemp); //oled.Label((uint8_t *)text,5,5); strcpy((char *) text,""); textProperties.fontColor = COLOR_RED; textProperties.alignParam = OLED_TEXT_ALIGN_RIGHT; oled.SetTextProperties(&textProperties); strcpy((char *) text,"Temp."); oled.Label((uint8_t *)text,5,67); /* Format the value */ sprintf(text,"%i",sample_ftemp); /* Display time reading in 35px by 15px textbox at(x=55, y=40) */ oled.TextBox((uint8_t *)text,57,67,20,15); //Increase textbox for more digits /* Display Units */ strcpy((char *) text,"dF"); oled.Label((uint8_t *)text,82,67); wait(3); strcpy((char *) text,""); oled.TextBox((uint8_t *)text,0,0,96,96); } /* textProperties.fontColor = COLOR_WHITE; textProperties.alignParam = OLED_TEXT_ALIGN_CENTER; oled.SetTextProperties(&textProperties); strcpy((char *) text,""); strcpy((char *) text,"ECE 595"); oled.Label((uint8_t *)text,0,0); strcpy((char *) text," FITNESS MONITOR"); oled.Label((uint8_t *)text,0,7); */ //oled.TextBox((uint8_t *)text,0,0,96,96); /* Display Legends */ textProperties.fontColor = COLOR_RED; textProperties.alignParam = OLED_TEXT_ALIGN_RIGHT; oled.SetTextProperties(&textProperties); strcpy((char *) text,"Temp."); oled.Label((uint8_t *)text,5,67); /* Format the value */ sprintf(text,"%i",sample_ftemp); /* Display time reading in 35px by 15px textbox at(x=55, y=40) */ oled.TextBox((uint8_t *)text,57,67,20,15); //Increase textbox for more digits /* Display Units */ strcpy((char *) text,"dF"); oled.Label((uint8_t *)text,82,67); /* Set text properties to white and right aligned for the dynamic text */ textProperties.fontColor = COLOR_BLUE; textProperties.alignParam = OLED_TEXT_ALIGN_RIGHT; oled.SetTextProperties(&textProperties); /* Display Legends */ strcpy((char *) text,"Humidity"); oled.Label((uint8_t *)text,5,81); /* Format the value */ sprintf(text,"%i",sample_humid); /* Display time reading in 35px by 15px textbox at(x=55, y=40) */ oled.TextBox((uint8_t *)text,57,81,20,15); //Increase textbox for more digits /* Display Units */ strcpy((char *) text,"%"); oled.Label((uint8_t *)text,82,81); //pedometer textProperties.fontColor = COLOR_GREEN; textProperties.alignParam = OLED_TEXT_ALIGN_RIGHT; oled.SetTextProperties(&textProperties); strcpy((char *) text1,"Steps:"); oled.Label((uint8_t *)text1,3,35); acc=sqrt(pow(ax,2)+pow(ay,2)/2); textProperties.fontColor = COLOR_WHITE; textProperties.alignParam = OLED_TEXT_ALIGN_RIGHT; oled.SetTextProperties(&textProperties); strcpy((char *) text1,"Calories:"); oled.Label((uint8_t *)text1,3,50); if(acc>0.3){ wait(0.5); ped++; if(ped==oldped+36){ cal++; oldped=ped; } } if(ped>25) { oled_text_properties_t textProperties = {0}; oled.GetTextProperties(&textProperties); //oled1.clear(BLACK); //oled.TextBox((uint8_t *)text,0,0,96,96); wait(1); /* Get OLED Class Default Text Properties */ //for(int i=0;i<5;i++) // { /* Set text properties to white and right aligned for the dynamic text */ textProperties.fontColor = COLOR_GREEN; textProperties.alignParam = OLED_TEXT_ALIGN_CENTER; oled.SetTextProperties(&textProperties); strcpy((char *) text,""); strcpy((char *) text,"TargetAchieved"); oled.Label((uint8_t *)text,0,7); strcpy((char *) text,""); //sprintf(text,"%i", rand() % 5 + 62); //oled.Label((uint8_t *)text,70,7); //wait(7); } /* Format the value */ textProperties.fontColor = COLOR_GREEN; textProperties.alignParam = OLED_TEXT_ALIGN_RIGHT; oled.SetTextProperties(&textProperties); sprintf(text1,"%4d",ped); oled.TextBox((uint8_t *)text1,70,35,20,15); //Increase textbox for more digits /* Display time reading in 35px by 15px textbox at(x=55, y=40) */ textProperties.fontColor = COLOR_WHITE; textProperties.alignParam = OLED_TEXT_ALIGN_RIGHT; oled.SetTextProperties(&textProperties); sprintf(text1,"%4d",cal); /* Display time reading in 35px by 15px textbox at(x=55, y=40) */ oled.TextBox((uint8_t *)text1,70,50,20,15); if(once==0) { wait(8); once=1; } } } void StartHaptic(void) { hapticTimer.start(30); haptic = 1; } void StopHaptic(void const *n) { haptic = 0; hapticTimer.stop(); } void ButtonUp(void) { StartHaptic(); redLed = LED_ON; greenLed = LED_OFF; blueLed = LED_OFF; /* Fills the screen with solid black */ oled_text_properties_t textProperties = {0}; oled.GetTextProperties(&textProperties); //oled1.clear(BLACK); //oled.TextBox((uint8_t *)text,0,0,96,96); wait(1); /* Get OLED Class Default Text Properties */ //for(int i=0;i<5;i++) // { /* 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); strcpy((char *) text,""); strcpy((char *) text,"Heart Rate"); oled.Label((uint8_t *)text,0,20); strcpy((char *) text,""); sprintf(text,"00"); oled.Label((uint8_t *)text,70,20); wait(2); textProperties.fontColor = COLOR_RED; textProperties.alignParam = OLED_TEXT_ALIGN_CENTER; oled.SetTextProperties(&textProperties); sprintf(text,"%i",sample ); oled.Label((uint8_t *)text,70,20); if(sample>150){ textProperties.fontColor = COLOR_GREEN; textProperties.alignParam = OLED_TEXT_ALIGN_CENTER; oled.SetTextProperties(&textProperties); strcpy((char *) text,""); strcpy((char *) text,"Slow Down"); oled.Label((uint8_t *)text,0,7); strcpy((char *) text,""); } wait(8); //oled.FillScreen(COLOR_BLACK); //} // strcpy((char *) text,""); //oled.Label((uint8_t *)text,0,0); //oled.TextBox((uint8_t *)text,0,0,96,96); //oled.FillScreen(COLOR_BLACK); //oled1.clear(BLACK); // StopHaptic(1); } void ButtonDown(void) { StartHaptic(); redLed = LED_ON; greenLed = LED_OFF; blueLed = LED_OFF; /* Turn on the backlight of the OLED Display */ oled_text_properties_t textProperties = {0}; oled.GetTextProperties(&textProperties); textProperties.fontColor = COLOR_RED; textProperties.alignParam = OLED_TEXT_ALIGN_RIGHT; oled.SetTextProperties(&textProperties); sprintf(text,"%d",00); oled.Label((uint8_t *)text,70,20); } void ButtonRight(void) { StartHaptic(); redLed = LED_OFF; greenLed = LED_OFF; blueLed = LED_ON; oled_text_properties_t textProperties = {0}; oled.GetTextProperties(&textProperties); //oled1.clear(BLACK); //oled.TextBox((uint8_t *)text,0,0,96,96); wait(1); /* Get OLED Class Default Text Properties */ //for(int i=0;i<5;i++) // { /* Set text properties to white and right aligned for the dynamic text */ //if(bool maxim_max30102_init()==true){ //maxim_max30102_read_fifo(0,0); /* textProperties.fontColor = COLOR_GREEN; textProperties.alignParam = OLED_TEXT_ALIGN_RIGHT; oled.SetTextProperties(&textProperties); strcpy((char *) text1,"FEVER"); /* Display time reading in 35px by 15px textbox at(x=55, y=40) */ /* oled.TextBox((uint8_t *)text1,70,50,20,15); wait(5); } /*textProperties.fontColor = COLOR_GREEN; textProperties.alignParam = OLED_TEXT_ALIGN_CENTER; oled.SetTextProperties(&textProperties); strcpy((char *) text,""); strcpy((char *) text,"FEVER"); oled.Label((uint8_t *)text,0,7); strcpy((char *) text,""); sprintf(text,"%i", rand() % 3 + 37); oled.Label((uint8_t *)text,70,7); wait(7); */ oled.DimScreenON(); } void ButtonLeft(void) { StartHaptic(); redLed = LED_ON; greenLed = LED_ON; blueLed = LED_OFF; /* oled_text_properties_t textProperties = {0}; oled.GetTextProperties(&textProperties); heart.enable(); heart.heartRate_SendToKW40( data) textProperties.fontColor = COLOR_RED; textProperties.alignParam = OLED_TEXT_ALIGN_CENTER; oled.SetTextProperties(&textProperties); strcpy((char *) text,""); strcpy((char *) text,"Heart Rate"); oled.Label((uint8_t *)text,0,20); strcpy((char *) text,""); sprintf(text,"%i", data); oled.Label((uint8_t *)text,70,20); wait(7); */ } void ButtonSlide(void) { StartHaptic(); redLed = LED_ON; greenLed = LED_ON; blueLed = LED_ON; }