Now that I had a fully working piano there were of course still some things I wanted to enhance:
- recalling that the reflection strips under the keys are all glued by hand It is quite clear that would not lead to a uniform sensor response. So there had to be found a way to make the keys react more uniformly.
- The first approach to solve the issue above was just to calibrate the sensors in a way that their individual sensing range is taken into account by transforming the set parameters from a global space to an individual local space that is stretched according to the sensor range. But I made the mistake to let the master controller do all that work which slowed the process down to several seconds.
- I still have some issues with range ‘holes’ in the MIDI data that look like being numerical issues.
- I wanted to be able to store keyboard profiles on a PC for convenient switching,
Anyway you see there is still many things that need to be changed at the code, which is quite inconvenient when you have to flash 11 controllers separately being forced to dismount everything. So what I really needed was a bootloader that would enable me to change the program of my entire sensor bar with one click.
In my case it was necessary to have a bootloader that fetches its data by I2C and that could update the firmware for 11 controllers simultanously. Not knowing such a bootloader that would not interfer with my I2C protocols used to transfer the keystrokes and settings I decided to write my own in c. Anyway I always wanted to engage myself with writing an own bootloader and if you’re still not satisfied I say: ‘because I can.’
Since I wanted to have a PC client for my piano anyway, I started developing one in c# that includes the bootloader server(or client whatever point of view you have) needed to send the software to the controller. It is also capable of reading out and setting up the keyboard parameters for all keys and to store and load them on your harddrive. Below you can see a screenshot of this software: