Heart rate

Dependencies:   BSP_DISCO_F746NG

main.cpp

Committer:
aurelienbonnet
Date:
2021-06-22
Revision:
7:1fd6069cce9b
Parent:
6:e8f8a8037256

File content as of revision 7:1fd6069cce9b:

#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) {


    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;
        }
        
        
        
    }
}