Real-time heart beat display?

A friend of mine is looking for a way to monitor their heart beat in real time on their Fenix 6. As in, see a blinking icon (or whatever) that is actually in sync with each individual beat. 

See https://forums.garmin.com/apps-software/mobile-apps-web/f/connect-iq-store-android/373691/heartbeat-realtime-blinking-symbol

As near as I can tell, this is not possible for a watch face or data field, both of which are limited to drawing once per second. Maybe an app or widget can do it, I'm not sure.

It seems like two things would be needed:

  1. Updates from the hear-rate sensor that are (close to) real-time. Presumably using registerSensorDataListener. Is there any documentation or general knowledge about the latency and consistency of this API? Or a different way to get precise timing of beats?
  2. Calling requestUpdate() more than once per second and getting onUpdate called with a predictable delay. The docs don't seem to say if there are limits or SLAs.

Also, does the use of an external hear rate strap vs the watch's own sensor make a difference?

I will do some experiments and see if I can get an idea of what's possible, but it would be great if anyone has experience to share.

Thanks!

  • The best you can do in a watch face is to update the HR every second.  With an AMOLED display in low power mode, it only can update once a minute.  The f6 is MIP and not AMOLED, so every second there.

    The way to easily get the HR is to use Activity.getActivityInfo().currentHeartRate.  With an OHR, it's in battery saving 24/7 mode.  You can't access the Sensor module directly from a watch face.  If the watch isn't being worn, the value will be null.  This doesn't work with an external HRM

    Here's a watch face I did years ago for a friend's elderly relative that wanted to see her HR (and nothing more) all the time that demonstrates this, but the same principle can be seen in many watch faces

    https://apps.garmin.com/apps/ee705622-4114-4035-a913-a72c29810ce6

    With a data field, it too only updates once a second, but it will use a more accurate OHR mode and can use an external sensor.  It will use much more of the battery than a watch face.

    With a widget, they will time out after a short time (1-2 minutes)

    With a decice app, the screen can be updated very often.  That will definitely impact the battery.  The OHR can be set to the higher accuracy, and an extremal HRM can be used (more impact on the battery

  • (I originally posted an extremely dumb reply (now deleted) which mixed up beats per minute with beats per second lol.)

    I’m not sure if real-time HR is available in Connect IQ, but I can say that it’s possible to update the screen as often as once every 50 ms (by using a timer to call onUpdate() — 50 ms is the minimum timer interval on most devices). That works out to 20 Hz / FPS, which would be more than enough for your purposes. I’ve determined this in the past by writing a small app to test scrolling text horizontally across the screen, with 50 ms updates.

    But even if you could get real-time HR data with sufficiently low latency and jitter, I can’t say whether the latency / jitter of the updates would be satisfactory for you.