BangleJS touch stops working after first touch

Posted on
  • Whenever I use a touch on the screen for the first time after a reset it works (i.e. drags, clicks etc.), but from then on it will not respond to any touch until I reset the device.

    So it feels like not a hardware issue per se, but something is getting latched.

    Has anyone seen this issue - or do is my Bangle broken? :(

  • Are you sure it's not just that the Bangle is locked? Lock icon in top left. You need to press the button to unlock it.

    If not, please could you connect with the Web IDE, and copy/paste the following on the left-hand side:

    reset();
    Bangle.on('drag',print);
    

    Then make sure you press a button to unlock it, and drag your finger over and see if anything gets printed to the screen - that should go some way to showing if it's a software issue or not.

  • Thank you Gordon for that little test code (and for ensuring I was unlocking).

    The results are very curious, and I would value your thoughts.

    Immediately after I run this code the screen shows the Bangle logo and version info.

    For about 1-2 seconds I can then drag on the screen - either continuously or multiple times - and a long stream of events shows.

    This then stops, and I can't get the stream to restart.

    If I then wait until the light goes out, press the button, and start dragging the stream can restart, but only for a short time (1 sec max?) - although the precise time appears to vary.

    I can continue this cycle of [stream, wait until light goes out, press button, stream for a short while] for a number of times, until eventually it stops streaming even after pressing the button.

    At this point I find that if I repeat the Bangle.on command, this reenables the short streaming/light out/button cycle.

    So in summary, I appear to be seeing in software what I am experiencing when using the Bangle generally, that is - shortly after dragging/tapping etc. the facility stops working, and restarts only for very short periods of time.

    Does this illuminate the problem any further?

    Many thanks,
    James

  • Thanks! That does seem like a really strange one...

    When it's not working, please could you tell me what D36.read() reports back?

    Also, please could you try running Bangle.setLocked(1);Bangle.setLocked(0);­ and see if that brings it back to life?

    My guess is for some reason the communications with the touchscreen aren't 100% reliable. The touchscreen pulls an IRQ line low when there's data and then when it's read out it goes high - but if the read failed then I guess it'd be stuck low.

    It'd be really good to see if completely flattening the battery and recharging fixed it (as that would reset the touch IC), but if it is what I think it is, it should be pretty easy to detect the problem and fix in software.

  • D36.read() returns true 99% of the time (I got one single time when it returned false)

    setLocked(1);setLocked(0); re-enables the streaming of touch events. I also tried just setting setLocked(0) on it's own which had the same effect.

    At one point I received a lot of these errors:
    Uncaught Error: I2C Error: Arbitration (start)

    Should I try flattening the battery? Is there a way to speed up the process on that?! 🙂

  • Does D36.read() return true even when the touchscreen has stopped responding and the screen is definitely unlocked? That's the important one really.

    Should I try flattening the battery? Is there a way to speed up the process on that?!

    Yes :) Please could you connect with the Web IDE and run:

    Bangle.setLCDTimeout(0);Bangle.setLCDPow­er(1);Bangle.setGPSPower(1);Bangle.setHR­MPower(1);Bangle.setCompassPower(1);Bang­le.setBarometerPower(1);
    

    Then just leave it - it should flatten itself within 6 hours.

    At one point I received a lot of these errors: Uncaught Error: I2C Error: Arbitration (start)

    Thanks - that's really good to know. That'd definitely back up what I thought - it's possible I'm just running the touchscreen interface too fast in Bangle.js.

  • I have now flattened the battery to the point it turned off and wouldn't turn back on. I then recharged it. No apparent change.

    Does D36.read() return true even when the touchscreen has stopped responding and the screen is definitely unlocked? That's the important one really.

    Not sure how to check "definitely unlocked". It shouldn't be locked (it hasn't had enough time to timeout), and yet whenever I run setLocked(0) the touch begins responding again (and D36.read() returns true in any case).

    It's almost as if it's locking too soon, or not in response to being touched (I would expect that touching would reset the lock delay, but perhaps it is not?).

    Or maybe unlocking it is clearing something and allowing the events to restart.

    Are there next steps I can take?

  • D36.read() returns true in any case

    Ok, thanks - so annoyingly it's not what I thought was happening then. While it may be fixable in software, it's not going to be quite as easy as I thought.

    I would expect that touching would reset the lock delay, but perhaps it is not?

    It definitely should do. setLocked(0) is actually reconfiguring the touchscreen by resetting it (even if the screen is already unlocked) so I guess that's why it's starting to work again.

    I'll drop you an email and will arrange to get another Bangle out to you. There's obviously something not quite right with yours and it's something it would be handy to look at.

  • Post a reply
    • Bold
    • Italics
    • Link
    • Image
    • List
    • Quote
    • code
    • Preview
About

BangleJS touch stops working after first touch

Posted by Avatar for SgntGrime @SgntGrime

Actions