• { "vcPPG": 1419, "vcPPGoffs": 0, "isWearing": true, "adjusted": false,
      "vcPre": [ 4, 0 ],
      "vcPS": 15,
      "vcEnv": [ 0, 0, 0 ],
      "vcIRQ": 4,
      "vcRaw": new Uint8Array([0, 4, 130, 4, 0, 15, 5, 128, 224, 87, 55, 103]).buffer,
      "raw": 2838, "bpm": 60, "confidence": 80, "filt": -26624, "avg": 2929 }
    

    Look at the object from hrm-raw event. I noticed in halemmerich's code that he logs also e.vcPPG. I wonder how this value differs from raw.

    I conclude that hrm.raw is the sum of the e.vcPPG and e.vcPPGoffs, then multiplied by 2.

    proof:

    int v = vcInfo.ppgValue + vcInfo.ppgOffset;
      if (vcType == VC31B_DEVICE)
        v <<= 1; // on VC31B the PPG doesn't vary as much with pulse so try and bulk it up here a bit
    hrmCallback(v);
    
About

Avatar for d3nd3-o0 @d3nd3-o0 started