presentar valores del max30100 en lcd 16x2

hola soy nuevo en el foro, estoy desarrollando un proyecto con diversos tipos de sensores, y e aquí mi problema, uno de mis sensores en este caso el max 30100 no logra presentar los resultados en el lcd, les dejo aqui el codigo, lo que me sucede es que al presionar se queda estatico en lo que anterior mente presento, en cambio si elimino esa parte se presentan las palabaras que estan presentes en el bucle for pero no los valores del sensor, estoy usando un modulo ardunio uno si es de ayuda…desde ya muchas gracias !!

#include <CircularBuffer.h>
#include <MAX30100.h>
#include <MAX30100_BeatDetector.h>
#include <MAX30100_Filters.h>
#include <MAX30100_PulseOximeter.h>
#include <MAX30100_Registers.h>
#include <MAX30100_SpO2Calculator.h>
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal.h>
#include <LiquidCrystal_I2C.h>
int p,pulsado,i;
LiquidCrystal_I2C lcd(0x3F,2,1,0,4,5,6,7,3,POSITIVE);
 #define REPORTING_PERIOD_MS     1000
PulseOximeter pox;
uint32_t tsLastReport = 0; 

void pulso(void);
void setup()
{
  
  // Indicar a la libreria que tenemos conectada una pantalla de 16x2
  lcd.begin(16,2);
  // Mover el cursor a la primera posición de la pantalla (0, 0)
  lcd.home ();
  // Imprimir "Hola Mundo" en la primera linea
  lcd.print("BIENVENIDO");
  // Mover el cursor a la segunda linea (1) primera columna
  lcd.setCursor ( 0, 1 );
  // Imprimir otra cadena en esta posicion
  lcd.print("A HEALTHY LIFE");
  // Esperar un segundo
  delay(3000);
  Serial.begin (9600);
  pinMode(13,INPUT);
}
 
void loop()
{
 do
 {
 lcd.clear();
 lcd.setCursor(0,0);
 lcd.write("Pulse el boton 1");
 lcd.setCursor(0,1);
 lcd.write("para SO2");
 delay(1000);
 p=digitalRead(13);
 }while(p==HIGH);
 
 p=digitalRead(13);
 if(p==LOW);
 {
  pulsado=1;
 }
 
 if (p==LOW&&pulsado==1)
 {
   pulso();
  }
}

void pulso(void)
{
  for(i=0;i<10;i++)
  {
 pox.update();
 
    if (millis() - tsLastReport > REPORTING_PERIOD_MS) {
        lcd.clear();
        lcd.setCursor(0,0);
    
        lcd.print("HR: ");
        lcd.print(pox.getHeartRate());
        lcd.print(" bpm");
 
        lcd.setCursor(0,1);
    
        lcd.print("SpO2: ");
        lcd.print(pox.getSpO2());
        lcd.print("%");
 
        tsLastReport = millis();
    }
  }
}

Esto esta mal

if (p==LOW); 
 {
  pulsado=1;
 }

debe ser asi

if (p==LOW)
 {
  pulsado=1;
 }

gracias por responder !! pero lamentablemente esa no es la solución ya que lo arregle en mi programa y sigue realizando la misma acción, una vez presionado el pulsador (pin 13) la imagen sigue estática

Yo te dije que esa era la solución?
Escribí,

Esto esta mal

Acabo de reescribir tu programa a ver si de esta manera se visualiza correctamente.
cada vez que presiones, mostrará o el aviso de pulsar el boton o la información cada 1 segundo

#include <CircularBuffer.h>
#include <MAX30100.h>
#include <MAX30100_BeatDetector.h>
#include <MAX30100_Filters.h>
#include <MAX30100_PulseOximeter.h>
#include <MAX30100_Registers.h>
#include <MAX30100_SpO2Calculator.h>
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal.h>
#include <LiquidCrystal_I2C.h>

#define BOTON 13
int i;
bool p, p_Ant = false;
bool pulsado;

LiquidCrystal_I2C lcd(0x3F,2,1,0,4,5,6,7,3,POSITIVE);

#define REPORTING_PERIOD_MS     1000UL
PulseOximeter pox;

uint32_t tsLastReport = 0; 

void pulso(void);

void setup() {
  // Indicar a la libreria que tenemos conectada una pantalla de 16x2
  lcd.begin(16,2);
  // Mover el cursor a la primera posición de la pantalla (0, 0)
  lcd.home ();
  // Imprimir "Hola Mundo" en la primera linea
  lcd.print("BIENVENIDO");
  // Mover el cursor a la segunda linea (1) primera columna
  lcd.setCursor ( 0, 1 );
  // Imprimir otra cadena en esta posicion
  lcd.print("A HEALTHY LIFE");
  // Esperar un segundo
  delay(3000);
  Serial.begin (9600);
  pinMode(BOTON,INPUT);
  pulsado = false;
}
 
void loop() {
  p = digitalRead(BOTON);
  if (!p && p_Ant) {   // flanco de 1 a 0?
      pulsado = !pulsado;
  }
  p_Ant = p;

  if (!pulsado) {
       lcd.clear();
       lcd.setCursor(0,0);
       lcd.write("Pulse el boton 1");
       lcd.setCursor(0,1);
       lcd.write("para SO2");
       delay(1000);
       p = digitalRead(BOTON);
  } 
  else 
      pulso();
}

void pulso(void) {
  for (i=0;i<10;i++)   {
      pox.update();
   
      if (millis() - tsLastReport > REPORTING_PERIOD_MS) {
          lcd.clear();
          lcd.setCursor(0,0);
      
          lcd.print("HR: ");
          lcd.print(pox.getHeartRate());
          lcd.print(" bpm");
   
          lcd.setCursor(0,1);
      
          lcd.print("SpO2: ");
          lcd.print(pox.getSpO2());
          lcd.print("%");
   
          tsLastReport = millis();
      }
  }
}