
Heart rate
Dependencies: BSP_DISCO_F746NG
Revision 7:1fd6069cce9b, committed 2021-06-22
- Comitter:
- aurelienbonnet
- Date:
- Tue Jun 22 12:18:54 2021 +0000
- Parent:
- 6:e8f8a8037256
- Commit message:
- Heart rate project;
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
diff -r e8f8a8037256 -r 1fd6069cce9b main.cpp --- a/main.cpp Wed Nov 20 11:33:58 2019 +0100 +++ b/main.cpp Tue Jun 22 12:18:54 2021 +0000 @@ -1,40 +1,136 @@ #include "mbed.h" +#include "stm32746g_discovery.h" +#include "stm32746g_discovery_ts.h" #include "stm32746g_discovery_lcd.h" +I2C i2c(PB_9, PB_8); +const int addr = 0xA0; +TS_StateTypeDef TS_State = {0}; + int main() { BSP_LCD_Init(); BSP_LCD_LayerDefaultInit(LTDC_ACTIVE_LAYER, LCD_FB_START_ADDRESS); BSP_LCD_SelectLayer(LTDC_ACTIVE_LAYER); + int touchScreen=1; + char heart_rate; + + /* Touchscreen initialization */ + if (BSP_TS_Init(BSP_LCD_GetXSize(), BSP_LCD_GetYSize()) == TS_ERROR) { + printf("BSP_TS_Init error\n"); + } + + /* Clear the LCD */ + BSP_LCD_Clear(LCD_COLOR_WHITE); + + /* Set Touchscreen Demo1 description */ + BSP_LCD_SetTextColor(LCD_COLOR_BLACK); + BSP_LCD_FillRect(0, 0, BSP_LCD_GetXSize(), 40); + BSP_LCD_SetTextColor(LCD_COLOR_WHITE); + BSP_LCD_SetBackColor(LCD_COLOR_BLACK); + BSP_LCD_SetFont(&Font24); + BSP_LCD_DisplayStringAt(0, 0, (uint8_t *)"Touch to start heart rate", CENTER_MODE); + + + while(touchScreen) + { + BSP_TS_GetState(&TS_State); + if (TS_State.touchDetected) + { + touchScreen=0; + } + } + + + //Board shape 270x480 + + int i=0,j=0,h=136,etat=0; + int tab[480]; + int rate=1,rate_start=0; + char affichHeart [50],affich[50],affichi[50]; + BSP_LCD_Clear(LCD_COLOR_WHITE); + BSP_LCD_SetFont(&LCD_DEFAULT_FONT); + BSP_LCD_SetBackColor(LCD_COLOR_WHITE); + + for(int x=0; x<480; x++) + { + BSP_LCD_DrawPixel(x,h,LCD_COLOR_RED); + tab[x]=h; + } + + while (1) { - BSP_LCD_Clear(LCD_COLOR_BLACK); - BSP_LCD_SetFont(&LCD_DEFAULT_FONT); - BSP_LCD_SetBackColor(LCD_COLOR_WHITE); - BSP_LCD_SetTextColor(LCD_COLOR_DARKBLUE); - BSP_LCD_DisplayStringAt(0, 1, (uint8_t *)"MBED EXAMPLE", CENTER_MODE); - HAL_Delay(2000); - - BSP_LCD_SetBackColor(LCD_COLOR_BLACK); - BSP_LCD_SetTextColor(LCD_COLOR_ORANGE); - BSP_LCD_DisplayStringAt(0, 100, (uint8_t *)"DISCOVERY STM32F746NG", CENTER_MODE); - HAL_Delay(2000); - BSP_LCD_Clear(LCD_COLOR_GREEN); - BSP_LCD_SetTextColor(LCD_COLOR_BLUE); - BSP_LCD_DrawRect(10, 20, 50, 50); - BSP_LCD_SetTextColor(LCD_COLOR_BROWN); - BSP_LCD_DrawCircle(80, 80, 50); - BSP_LCD_SetTextColor(LCD_COLOR_YELLOW); - BSP_LCD_DrawEllipse(150, 150, 50, 100); - BSP_LCD_SetTextColor(LCD_COLOR_RED); - BSP_LCD_FillCircle(200, 200, 40); - HAL_Delay(2000); - - BSP_LCD_SetBackColor(LCD_COLOR_GREEN); - BSP_LCD_SetTextColor(LCD_COLOR_CYAN); - BSP_LCD_DisplayStringAt(0, 6, (uint8_t *)"HAVE FUN !!!", RIGHT_MODE); - HAL_Delay(2000); + i2c.read(addr, &heart_rate, 1); + rate=479-(479*((double)heart_rate/140.0)); + + sprintf(affichHeart, "%d", heart_rate); + + /* Set Touchscreen Demo1 description */ + BSP_LCD_SetTextColor(LCD_COLOR_BLACK); + BSP_LCD_FillRect(0, 0, BSP_LCD_GetXSize(), 40); + BSP_LCD_SetTextColor(LCD_COLOR_WHITE); + BSP_LCD_SetBackColor(LCD_COLOR_BLACK); + BSP_LCD_SetFont(&Font24); + BSP_LCD_DisplayStringAt(0, 0, (uint8_t *)affichHeart, CENTER_MODE); + + if (h==136)BSP_LCD_DrawPixel(i,h,LCD_COLOR_RED); + else + { + BSP_LCD_DrawPixel(i,h,LCD_COLOR_RED); + } + tab[i]=h; + HAL_Delay(3); + + i++; + j=i+1; + if (i>=479){i=0;} + if (j>=479){j=0;} + if (rate==479)etat=3; + sprintf(affich,"%d",etat); + + sprintf(affichi,"%d",i); + switch(etat) + { + //Paterne BPM + //Montant 136 -> 200 + case 0 : BSP_LCD_DrawPixel(j,tab[j],LCD_COLOR_WHITE); + h=h+6;; + if (h>=200)etat=1; + break; + + //Descendant 200->72 + case 1 : BSP_LCD_DrawPixel(j,tab[j],LCD_COLOR_WHITE); + h=h-6; + BSP_LCD_DisplayStringAt(0, 0, (uint8_t *) affichi,RIGHT_MODE); + if (h<=72)etat=2; + break; + + //Montant 72 -> 136 + case 2 : BSP_LCD_DrawPixel(j,tab[j],LCD_COLOR_WHITE); + h=h+6; + if (h>=136)etat=3; + break; + + case 3 : rate_start=i; + if ((rate_start+rate)>479) + { + rate_start=i-(rate_start+rate); + } + BSP_LCD_DrawPixel(j,tab[j],LCD_COLOR_WHITE); + if (rate!=479)etat=4; + break; + + //Tempo + case 4 : BSP_LCD_DrawPixel(j,tab[j],LCD_COLOR_WHITE); + h=136; + if ((rate_start+rate)==i)etat=0; + break; + } + + + } }