Heart rate

Dependencies:   BSP_DISCO_F746NG

Committer:
aurelienbonnet
Date:
Tue Jun 22 12:18:54 2021 +0000
Revision:
7:1fd6069cce9b
Parent:
6:e8f8a8037256
Heart rate project;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bcostm 0:b045ca817e2c 1 #include "mbed.h"
aurelienbonnet 7:1fd6069cce9b 2 #include "stm32746g_discovery.h"
aurelienbonnet 7:1fd6069cce9b 3 #include "stm32746g_discovery_ts.h"
Jerome Coutant 6:e8f8a8037256 4 #include "stm32746g_discovery_lcd.h"
bcostm 0:b045ca817e2c 5
aurelienbonnet 7:1fd6069cce9b 6 I2C i2c(PB_9, PB_8);
aurelienbonnet 7:1fd6069cce9b 7 const int addr = 0xA0;
aurelienbonnet 7:1fd6069cce9b 8 TS_StateTypeDef TS_State = {0};
aurelienbonnet 7:1fd6069cce9b 9
bcostm 0:b045ca817e2c 10 int main()
Jerome Coutant 6:e8f8a8037256 11 {
Jerome Coutant 6:e8f8a8037256 12 BSP_LCD_Init();
Jerome Coutant 6:e8f8a8037256 13 BSP_LCD_LayerDefaultInit(LTDC_ACTIVE_LAYER, LCD_FB_START_ADDRESS);
Jerome Coutant 6:e8f8a8037256 14 BSP_LCD_SelectLayer(LTDC_ACTIVE_LAYER);
aurelienbonnet 7:1fd6069cce9b 15 int touchScreen=1;
aurelienbonnet 7:1fd6069cce9b 16 char heart_rate;
aurelienbonnet 7:1fd6069cce9b 17
aurelienbonnet 7:1fd6069cce9b 18 /* Touchscreen initialization */
aurelienbonnet 7:1fd6069cce9b 19 if (BSP_TS_Init(BSP_LCD_GetXSize(), BSP_LCD_GetYSize()) == TS_ERROR) {
aurelienbonnet 7:1fd6069cce9b 20 printf("BSP_TS_Init error\n");
aurelienbonnet 7:1fd6069cce9b 21 }
aurelienbonnet 7:1fd6069cce9b 22
aurelienbonnet 7:1fd6069cce9b 23 /* Clear the LCD */
aurelienbonnet 7:1fd6069cce9b 24 BSP_LCD_Clear(LCD_COLOR_WHITE);
aurelienbonnet 7:1fd6069cce9b 25
aurelienbonnet 7:1fd6069cce9b 26 /* Set Touchscreen Demo1 description */
aurelienbonnet 7:1fd6069cce9b 27 BSP_LCD_SetTextColor(LCD_COLOR_BLACK);
aurelienbonnet 7:1fd6069cce9b 28 BSP_LCD_FillRect(0, 0, BSP_LCD_GetXSize(), 40);
aurelienbonnet 7:1fd6069cce9b 29 BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
aurelienbonnet 7:1fd6069cce9b 30 BSP_LCD_SetBackColor(LCD_COLOR_BLACK);
aurelienbonnet 7:1fd6069cce9b 31 BSP_LCD_SetFont(&Font24);
aurelienbonnet 7:1fd6069cce9b 32 BSP_LCD_DisplayStringAt(0, 0, (uint8_t *)"Touch to start heart rate", CENTER_MODE);
aurelienbonnet 7:1fd6069cce9b 33
aurelienbonnet 7:1fd6069cce9b 34
aurelienbonnet 7:1fd6069cce9b 35 while(touchScreen)
aurelienbonnet 7:1fd6069cce9b 36 {
aurelienbonnet 7:1fd6069cce9b 37 BSP_TS_GetState(&TS_State);
aurelienbonnet 7:1fd6069cce9b 38 if (TS_State.touchDetected)
aurelienbonnet 7:1fd6069cce9b 39 {
aurelienbonnet 7:1fd6069cce9b 40 touchScreen=0;
aurelienbonnet 7:1fd6069cce9b 41 }
aurelienbonnet 7:1fd6069cce9b 42 }
aurelienbonnet 7:1fd6069cce9b 43
aurelienbonnet 7:1fd6069cce9b 44
aurelienbonnet 7:1fd6069cce9b 45 //Board shape 270x480
aurelienbonnet 7:1fd6069cce9b 46
aurelienbonnet 7:1fd6069cce9b 47 int i=0,j=0,h=136,etat=0;
aurelienbonnet 7:1fd6069cce9b 48 int tab[480];
aurelienbonnet 7:1fd6069cce9b 49 int rate=1,rate_start=0;
aurelienbonnet 7:1fd6069cce9b 50 char affichHeart [50],affich[50],affichi[50];
aurelienbonnet 7:1fd6069cce9b 51 BSP_LCD_Clear(LCD_COLOR_WHITE);
aurelienbonnet 7:1fd6069cce9b 52 BSP_LCD_SetFont(&LCD_DEFAULT_FONT);
aurelienbonnet 7:1fd6069cce9b 53 BSP_LCD_SetBackColor(LCD_COLOR_WHITE);
aurelienbonnet 7:1fd6069cce9b 54
aurelienbonnet 7:1fd6069cce9b 55 for(int x=0; x<480; x++)
aurelienbonnet 7:1fd6069cce9b 56 {
aurelienbonnet 7:1fd6069cce9b 57 BSP_LCD_DrawPixel(x,h,LCD_COLOR_RED);
aurelienbonnet 7:1fd6069cce9b 58 tab[x]=h;
aurelienbonnet 7:1fd6069cce9b 59 }
aurelienbonnet 7:1fd6069cce9b 60
aurelienbonnet 7:1fd6069cce9b 61
bcostm 0:b045ca817e2c 62
Jerome Coutant 6:e8f8a8037256 63 while (1) {
Jerome Coutant 6:e8f8a8037256 64
bcostm 0:b045ca817e2c 65
aurelienbonnet 7:1fd6069cce9b 66 i2c.read(addr, &heart_rate, 1);
aurelienbonnet 7:1fd6069cce9b 67 rate=479-(479*((double)heart_rate/140.0));
aurelienbonnet 7:1fd6069cce9b 68
aurelienbonnet 7:1fd6069cce9b 69 sprintf(affichHeart, "%d", heart_rate);
aurelienbonnet 7:1fd6069cce9b 70
aurelienbonnet 7:1fd6069cce9b 71 /* Set Touchscreen Demo1 description */
aurelienbonnet 7:1fd6069cce9b 72 BSP_LCD_SetTextColor(LCD_COLOR_BLACK);
aurelienbonnet 7:1fd6069cce9b 73 BSP_LCD_FillRect(0, 0, BSP_LCD_GetXSize(), 40);
aurelienbonnet 7:1fd6069cce9b 74 BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
aurelienbonnet 7:1fd6069cce9b 75 BSP_LCD_SetBackColor(LCD_COLOR_BLACK);
aurelienbonnet 7:1fd6069cce9b 76 BSP_LCD_SetFont(&Font24);
aurelienbonnet 7:1fd6069cce9b 77 BSP_LCD_DisplayStringAt(0, 0, (uint8_t *)affichHeart, CENTER_MODE);
aurelienbonnet 7:1fd6069cce9b 78
aurelienbonnet 7:1fd6069cce9b 79 if (h==136)BSP_LCD_DrawPixel(i,h,LCD_COLOR_RED);
aurelienbonnet 7:1fd6069cce9b 80 else
aurelienbonnet 7:1fd6069cce9b 81 {
aurelienbonnet 7:1fd6069cce9b 82 BSP_LCD_DrawPixel(i,h,LCD_COLOR_RED);
aurelienbonnet 7:1fd6069cce9b 83 }
aurelienbonnet 7:1fd6069cce9b 84 tab[i]=h;
aurelienbonnet 7:1fd6069cce9b 85 HAL_Delay(3);
aurelienbonnet 7:1fd6069cce9b 86
aurelienbonnet 7:1fd6069cce9b 87 i++;
aurelienbonnet 7:1fd6069cce9b 88 j=i+1;
aurelienbonnet 7:1fd6069cce9b 89 if (i>=479){i=0;}
aurelienbonnet 7:1fd6069cce9b 90 if (j>=479){j=0;}
aurelienbonnet 7:1fd6069cce9b 91 if (rate==479)etat=3;
aurelienbonnet 7:1fd6069cce9b 92 sprintf(affich,"%d",etat);
aurelienbonnet 7:1fd6069cce9b 93
aurelienbonnet 7:1fd6069cce9b 94 sprintf(affichi,"%d",i);
aurelienbonnet 7:1fd6069cce9b 95 switch(etat)
aurelienbonnet 7:1fd6069cce9b 96 {
aurelienbonnet 7:1fd6069cce9b 97 //Paterne BPM
aurelienbonnet 7:1fd6069cce9b 98 //Montant 136 -> 200
aurelienbonnet 7:1fd6069cce9b 99 case 0 : BSP_LCD_DrawPixel(j,tab[j],LCD_COLOR_WHITE);
aurelienbonnet 7:1fd6069cce9b 100 h=h+6;;
aurelienbonnet 7:1fd6069cce9b 101 if (h>=200)etat=1;
aurelienbonnet 7:1fd6069cce9b 102 break;
aurelienbonnet 7:1fd6069cce9b 103
aurelienbonnet 7:1fd6069cce9b 104 //Descendant 200->72
aurelienbonnet 7:1fd6069cce9b 105 case 1 : BSP_LCD_DrawPixel(j,tab[j],LCD_COLOR_WHITE);
aurelienbonnet 7:1fd6069cce9b 106 h=h-6;
aurelienbonnet 7:1fd6069cce9b 107 BSP_LCD_DisplayStringAt(0, 0, (uint8_t *) affichi,RIGHT_MODE);
aurelienbonnet 7:1fd6069cce9b 108 if (h<=72)etat=2;
aurelienbonnet 7:1fd6069cce9b 109 break;
aurelienbonnet 7:1fd6069cce9b 110
aurelienbonnet 7:1fd6069cce9b 111 //Montant 72 -> 136
aurelienbonnet 7:1fd6069cce9b 112 case 2 : BSP_LCD_DrawPixel(j,tab[j],LCD_COLOR_WHITE);
aurelienbonnet 7:1fd6069cce9b 113 h=h+6;
aurelienbonnet 7:1fd6069cce9b 114 if (h>=136)etat=3;
aurelienbonnet 7:1fd6069cce9b 115 break;
aurelienbonnet 7:1fd6069cce9b 116
aurelienbonnet 7:1fd6069cce9b 117 case 3 : rate_start=i;
aurelienbonnet 7:1fd6069cce9b 118 if ((rate_start+rate)>479)
aurelienbonnet 7:1fd6069cce9b 119 {
aurelienbonnet 7:1fd6069cce9b 120 rate_start=i-(rate_start+rate);
aurelienbonnet 7:1fd6069cce9b 121 }
aurelienbonnet 7:1fd6069cce9b 122 BSP_LCD_DrawPixel(j,tab[j],LCD_COLOR_WHITE);
aurelienbonnet 7:1fd6069cce9b 123 if (rate!=479)etat=4;
aurelienbonnet 7:1fd6069cce9b 124 break;
aurelienbonnet 7:1fd6069cce9b 125
aurelienbonnet 7:1fd6069cce9b 126 //Tempo
aurelienbonnet 7:1fd6069cce9b 127 case 4 : BSP_LCD_DrawPixel(j,tab[j],LCD_COLOR_WHITE);
aurelienbonnet 7:1fd6069cce9b 128 h=136;
aurelienbonnet 7:1fd6069cce9b 129 if ((rate_start+rate)==i)etat=0;
aurelienbonnet 7:1fd6069cce9b 130 break;
aurelienbonnet 7:1fd6069cce9b 131 }
aurelienbonnet 7:1fd6069cce9b 132
aurelienbonnet 7:1fd6069cce9b 133
aurelienbonnet 7:1fd6069cce9b 134
bcostm 0:b045ca817e2c 135 }
bcostm 0:b045ca817e2c 136 }