• I just looked into this more, and I believe unfortunately it's related to power fluctuations from the heart rate sensor.

    The HRM isn't being accessed at the time the accelerometer errors occur so it's not an I2C issue, but if I keep the HRM running but turn off the green LED part of it, the spurious readings stop.

    Or if you try:

    Bangle.setHRMPower(1)
    var diff  =0;
    Bangle.on("accel", a => diff+=a.diff);
    setInterval(function() {
      print(diff);
      diff=0;
    }, 1000);
    

    and put the watch face up on the desk, then slowly move your finger near (without touching) so it thinks you're wearing it and turns on the LEDs then you can see the difference in accelerometer readings really goes up drastically, and down when you move your finger away and the LEDs turn off.

    It's not a great situation but there's not much we can really do to fix the accuracy (except maybe put the accelerometer into a higher power mode that does more averaging when the HRM is on).

    But, I just bumped the threshold for tap detection up a tiny bit (0x1A to 0x25) and that's had a massive effect on the misreported taps, without noticeably causing problems detecting any normal taps - so if you try the current 'cutting edge' build I think you'll find its a lot better

    Anyone who wants to experiment with different values can do so with:

    var c = Bangle.accelRd(0x18); // CNTL1
    Bangle.accelWr(0x18, c &~0x80);
    Bangle.accelWr(0x27, 0x25);
    Bangle.accelWr(0x18, c);
    
About

Avatar for Gordon @Gordon started