The XVA1 is a virtual analog DIY synthesizer, which is built upon the same platform as the XFM2 Synth. You can control the Synth via MIDI CC and SysEx messages, but it has no user interface. It is possible to make your own User Interface with an Arduino board, because you can also control the synth with an UART connection.
I really wanted to make my own User Interface and because I also like how easy it is to control my Hydrasynth, I decided to model my UI after the Hydrasynth. I’m not an experienced Arduino developer and this is my first “big” project, so the progress will be a bit slow, but it is really fun to work on it.
There will be one main screen with a digital Rotary Encoder which will be used to select the patches and for displaying a menu system. Because I don’t like extensive menu-diving, there will be shortcut-buttons which will take you to a specific menu page or task, like Oscillators, Filters, Envelopes, LFOs etc. When you have selected a page like Oscillators, you can change up to eight parameters with the eight Rotary Encoders in the middle. The screen between each pair of rotary encoder will display the names and values of the corresponding parameters. When there are more than eight parameters for a specific task, you can use the Up and Down buttons to scroll. For the Up, Down and Shortcut buttons I will use buttons with a built-in LED, so you can easily see which shortcut you selected and if it’s possible to scroll.
Above you see the first prototype on a bread board. I used an Seeeduino XIAO board, because it is very cheap, very small and also is a lot faster and has more memory than an Arduino Nano. I managed to select the patches with the rotary encoder and also read the selected patch from the Synth, so I can display the name of the patch.
After that I made a small prototype of two rotary encoders and a 0.96 inch black/white OLED screen in the middle.
In the next iteration I switched the main display with another one, which is smaller, but has a bigger resolution and I think it looks nicer with the black/white OLED display. The big chip you see on the top-left is a MCP23017, which expands the IO ports of the Seeeduino XIAO by 16. Because 9 rotary encoders with push-button, 13 buttons and 10 LEDs will use up a lot of IO pins, I think I’ll end up using three MCP23017 chips. The OLED displays has two possible addresses on the I2C bus, but you will have to desolder/solder a very small SMD resistor to make the change (which I have never done before) and the XIAO board only has one I2C bus, I will use an I2C multiplexer to connect the four displays.
The next thing I will do is actually make the two rotary encoders work, because the two values you see is actually just a static value. After that I will do some experimenting with a button matrix and LED matrix, because when I just connect each button and LED to an IO pin, I think even three MCP23017 chips will not be enough.
When I make some progress, I will make another post in this thread.