Tab Stomper2018-02-19 (updated 2018-04-07)
Most of the time when I'm playing guitar or bass, I'm reading from a tab on a screen. Since both hands are occupied by the instrument, scrolling the tab is an awkward dance of waiting for an appropriate pause in the music (or a section with only open strings, which don't require the fretting hand) and then quickly reaching out to hit the space bar. On a device without a keyboard, the process is even worse.
However, my feet are largely unoccupied while I play, except for supporting my weight and stomping on the occasional pedal. The natural solution to my problem is therefore a foot-activated page scrolling device. The simplest way I know to achieve this is with a USB HID keyboard to send key presses. The advantages of this approach are that most things which can display tabs support USB in some way, and there are no custom drivers or software required on the host.
Tab Stomper prototype 1 (V-USB, Arduino)2018-02-19
Hacky, minimal-effort prototype featuring an Arduino running V-USB.
Tab Stomper prototype 2 (V-USB, breadboard)2018-02-20 (updated 2018-04-07)
ATmega328P running V-USB on a breadboard.
The USB Device Class Definition for Human Interface Devices (HID) explains how HID works. In particular, it lists the subclass and protocol codes that you need to implement a keyboard.
The USB HID Usage Tables have a "Keyboard/Keypad Page", which lists key codes for all the keys. And I mean all the keys. They even have ones named "Prior", "Oper", and "ExSel".
As far as this project is concerned, the most difficult aspect of USB is the report descriptor.
Thankfully, Frank Zhao has an amazing Tutorial about USB HID Report Descriptors.
There is also an awful program called the HID Descriptor Tool, which can be found on the USB HID Information page.
For some bizarre reason, it extracts into
MSDEV/Projects/test/ and the UI is horrible, but it runs in Wine and gets the job done.