I hope that this content is high quality enough to justify the time you spend reading it, and how much time it took me to create it!
I’d love to hear your feedback and answer any questions!
Your problem is that you need to find some asynchronous storage or transmission method. For example in barebones avr, writing to the spi data register initiates a transfer, but you can do other things while you wait ~8 clocks for it to send. Interleaving like this can go quite a long way on 8 bit hardware.
In Arduino, there may be a lot of safety checking and blocking going on. Other chips (eg ARM) can do things like DMA where you can route data from eg a serial port straight into something else.
I believe the Feather M0 board I'm using is also capable of running CircuitPython (fork of MicroPython). For this project, I wanted to keep it simple, so I opted for Arduino, though I am more familiar with Python.
If you have any specific advice or improvements you'd like to suggest, I'd love to get them in either PRs or Issues for the project over on GitHub!
You could detect when a machine pistol is getting uncontrollable muzzle rise, then stop it until the trigger is released and reapplied.
You could hold off firing until the gun is stable. When the trigger is pulled, look for smooth movement. (no angular acceleration, and the regular acceleration has a stable magnitude equal to gravitational acceleration) The motion for leading a duck is fine, but the motion of stumbling and getting snagged on bushes is not.
You could disable the gun if acceleration goes to zero, for example by being dropped. After half a second of stable gravitational acceleration, reenable the gun.
However, I’ve always idly wondered about mounting a cheap keychain cam to a flashlight mount, then exploiting the rolling shutter effect to extract high frequency rotation information.
I love the Feather's though!