top of page

To do:

- Continue working on software

- 3D model main body

- 3D model neck

- change timing to use elapsedMillis and elapsedMicros instead of delay() and delayMicroseconds().

- add customization menus + settings

- add the rest of the buttons

- add analog inputs/whammy bar

- after finishing case, add charging and battery

- USB MIDI playback

​

Design decisions:

USB Midi vs Hardware Midi vs Both - 

    modern music equipment supports both. USB Midi will require soldering to the D+ and D- pads on the bottom of the Teensy and connecting those to the external port. Not available via standard pin access.

               - ON USB MIDI --- CAN SUPPORT READER OR COMPOSER MODE. READER MODE WILL READ SIGNALS COMING OFF THE LINE AND SEND THEM TO THE HARDWARE MIDI PORT WHERE THE VS1053B WILL PICK IT UP AND PLAY IT. THIS MEANS YOU CAN COMPOSE AND "AUTOPLAY" MIDI FROM A PC.

​

Settings mapping - due to the small EEPROM of the Teensy LC (128 bytes), I've opted to compress user settings that don't require a full byte in order to save space. This will be covered more in depth in a later document (as of now it's scrawlings on a piece of paper with bit shifts and byte counts)

​

Matrix input as a single value - this was kind of a fun decision. Since the Teensy LC has 32 bit registers, it can perform a move operation on a 4 byte int in a single operation (so I can return in 1 operation). Since my matrix has less than 32 buttons, I can assign each bit to a button and have them represent unique values (i.e. button 1 is always placed into bit 0, and it has a value of a 1 or a 0). If I were to use an array of 32 bytes, I would either have to return a pointer to the array and iterate through anyway, or package it into a struct, which would take more than 1 operation to fully move. Using a single 4 byte int to store all of the matrix inputs has the added benefit of being able to compare in a single operation to see if there was a change.

​

​

​

​

​

​

​

​

​

​

​

​

Musings and Ideas

"Shift" key, locks fret count while pressed. Because I noticed during prototyping that sometimes switching between awkward notes there's a squeak, you can use this key to stop your note from changing until you're ready. It will be optional, available to assign to one of the quick keys.

Hardware Serial - Teensy LC has "hardware serial" ports that are interrupt driven and use a buffer, which means I can send serial commands without having to wait for them to send in real time. Would normally take about .768ms to send a 3 byte command at 31250 baud. (1/31250 bits per second * 24 bits gives .0000768 seconds, x1000 gives .768 ms). This would screw up timing tremendously if I had to wait for my CPU to handle it when I actually called Serial.write(), but since it's buffered and interrupt driven, I don't have to worry about buffering midi commands as blocks and sending them myself during idle time. I confirmed this by examining the HardwareSerial library on the Teensy GitHub page.

© 2024 by BN. Proudly created with Wix.com

bottom of page