No I would not do it like that.
I would use an interrupt, this is a short sample of code from my lap timer project that looks for a pulse or 10ms. If it finds one it sets bIRPulseFlags to a value which indicates to the main code in look that we have seen the start and end of a pulse that is within our limits for a transponder pulse or in your case a heart beat from your other device.
To use this code or something similar you need to use attachInterrupt(0,captureLap,CHANGE); in your set up function.
You would then need to test bIRFlags to see if a new pulse has been received and if so record the time. If no pulse is received, compare the previously recorded time to the current time and if the interval is greater than your maximum tolerance you know there is a problem with the other device.
Sample taken from the Personal Lap Timer project, it isnt going to work if you cut and paste it without the rest of the project, but it should give you the right idea -
// A little bit of direct port access here - the code is using INT0 so we
// know its pin 3 of port B so to save a little time we are accessing the
// pin directly
if((PIND & B00000100) && (bIRPulseFlags == IR_PULSE_START_SET))
// high means end
ulEndPulse = micros();
ulPulseDuration = ulEndPulse - ulStartPulse;
if(ulPulseDuration > MIN_PULSE_DURATION && ulPulseDuration < MAX_PULSE_DURATION)
ulNewLapStartTime = millis();
bIRPulseFlags |= IR_PULSE_END_SET;
// this pulse is not good, clear flags and try for a good one
bIRPulseFlags = 0;
else if(!(PIND & B00000100) && (bIRPulseFlags == 0))
// low means start
ulStartPulse = micros();
bIRPulseFlags |= IR_PULSE_START_SET;