An update to my previous post. I was able to improive the average lag by disabling the serial monitor, passing a reference of the controller to the polling logic (eliminating the need to loop over the current state and previous state to determine if buttons should be pressed), and adding a 1ms delay between loops (should have realized that the board need some down time between calls). I’ve added the code since I think 8ms is a perfectly good lag result for a diy project.

  • Toes♀
    link
    fedilink
    English
    arrow-up
    5
    ·
    8 months ago

    Have you explored changing the polling logic to interrupt?

    • v1605@lemmy.worldOP
      link
      fedilink
      English
      arrow-up
      3
      ·
      8 months ago

      Can you provide an example? I only experimented with delay and found that 1 millisecond gave the best improvement.

      • Toes♀
        link
        fedilink
        English
        arrow-up
        2
        ·
        8 months ago

        I’m not familiar with the hardware at hand, but an example is how the PS/2 port on a computer is interrupt based. Where you press a button and it informs the cpu of the button press. I was curious if the hardware you’re working with has something akin to that.

        • v1605@lemmy.worldOP
          link
          fedilink
          English
          arrow-up
          8
          ·
          8 months ago

          The SNES uses shift registers on the controller. Polling it requires reading the registers to get the current state.