Codigo para leer el ritmo cardiaco

Hola, estoy tratando de crear un codigo que me lea las pulsaciones de mi ECG:

https://www.nutsvolts.com/magazine/article/February2017_Build-ECG-EKG-Unit

Tengo este codigo, pero no me esta leyendo las senales del ECG en mi LCD o el codigo.

include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd = LiquidCrystal_I2C(0x27, 16, 2);

float analogPin = A0;
float a=0; 

volatile int BPM; 
byte Heart[] = {
  B00000,
  B01010,
  B11111,
  B11111,
  B01110,
  B00100,
  B00000,
  B00000
};

int pin= 7;
unsigned long duration;
int calculation=0;


void setup() {
  lcd.init();
  lcd.backlight();
  lcd.print("MACHA ECG");
  lcd.createChar(0, Heart);
   
  pinMode(pin, INPUT);
  
}

void loop() {

analogRead(analogPin);  // read the input pin
  Serial.println(a);          // debug value
  
  lcd.display();
  lcd.setCursor(0, 1);
  lcd.write(0);
  delay(500);
  while ( duration = pulseIn(pin, HIGH)){
    calculation=1;
     delay (30000);
     calculation= 1;  

     }
        BPM= calculation*2; 


lcd.display();
  lcd.setCursor(0, 3);
  lcd.write(1);
  
if (BPM >=100){
  lcd.print ("Sinus Tachycardia");
  
}else if (BPM <=60){
  lcd.print ("Sinus Bradycardia");\
}else {
  lcd.print ("Normal Sinus");
}


  
}

No se que puedo hacer o que tengo mal, porfavor ayuda no se muy bien de arduino

Y para ello usas el circuito de Nuts & Volts? Comienza verificando que el circuito funciona.

Y si funciona... ¿A que parte del circuito estas conectando el pin 7?

¿Que se pretende aqui?
calculation siempre será 1 al salir de while y el delay hará pausas de 30 segundos
?¿

Aca la idea es que cada vez que el LED este on haga la operacion y a;ada uno.