July 1, 2023: It’s a Slow Train

The “Return of the Marthas” is starting to take shape, but it is taking a long time to tailor the existing software. The Marthas take the 3-way Arduino/Android code and make it 5-way, while upgrading from the AUDA1701 to the ADAU1466. Those changes haven’t been a huge technical hurdle, but there are so many tedious details that make the effort a real slog.

The crossover code works, which is a good start. Tapping the buttons on the Android app advances to the next crossover type or the next frequency in the list, and long pressing will return to the previous value in the list. The buttons send out the command codes that are documented in this draft PowerPoint briefing. The Arduino code determines the required filter types and calculates the biquad coefficients, and then puts that data into the ADAU1466 Parameter RAM. All of that code seems to be working properly.

The Android commands are sent using Bluetooth BLE messages. However, the commands can also be sent using MQTT over WiFi. The Android screenshot below shows a quickly implemented interface using the Arduino Cloud tool, with a “Messenger” widget. The command code for a crossover is “F”, and the command “F0704” sets the frequency of the Subwoofer-Woofer crossover to the 4th value in the table, which is 200Hz. Obviously, sending these codes using a messenger widget is not an elegant way to control the DSP, but it works fine for testing. The Arduino IOT code runs on a PC, but the IOT tools can generate an Android or iOS app that mimics the PC layout. So, we finally have a simple path to control high-level DSP functions from an iPhone.

The ESP32 does not allow using Bluetooth and WiFi simultaneously because there is only one RF channel. However, the CPU can receive data on either Bluetooth and WiFi, and as long as you don’t use Bluetooth and MQTT at the same time, it doesn’t get confused. That is, the code can monitor IOT messages and listen for Bluetooth commands, and it will respond to commands from either source.

Next up will be the EQ. I’m switching from a 9-band EQ to 10-band, as 10 bands seems to be more common, and the frequency spacing is a bit more “intuitive”. All of the frequencies and labels and command codes will get changed, both in the Arduino code and the Android app. Again, it won’t be hard, but there is a surprising number of time-consuming edits even for this seemingly simple change.

It’s a slow train, but at least it’s moving.