So it sounds like you have a 'letter' identifying the chord which is assigned by choosing the first unassigned letter when the chord is first encountered, and a 'chordValue' which somehow specifies the chord. What data type is 'chordValue'?
an int, I tried a byte which should have theoretically been sufficient but it proved difficult.
I had to divide the unique value aka chordValue that the user created to fit into a 255 value range. The removing of the fractional value along the way, made me account for slight discrepancy thus reducing the value space of a byte by around a third.
I need to rewrite how the chordValue is derived to make the necessary action feel more consistent to the user, so what the values will be are still up in the air, but I think its safe to say at this point that its out of the range of a byte and within the range of an int.
I think ive come up with away to check the value without making an array.
char checkAlt(int chordValue, int modifier)//untested
//lower case letters
//add more modifier definitions here, for symbols
//this should assure a unique address for an int, given values are correct
//probably could have incremented by 2, but the same vars would still need definitions
Still doesn't negate the "maximum write" problem, in fact It could make it worst, but it does take care of the issue of size. I just need to write an assignment function now.
If you are running out of RAM, there are techniques, such as putting string literals into PROGMEM. That can save quite a bit.
I'm going to have to look into it more, but since I'm modifying so many of the variables during run time its hard for me to see where to use progmem yet, A quick example with some of the code I've be throwing around would be great
the only string literals i can think are the debugging messages at the moment.. am I being too narrow?
wait a sec... are the debug messages in the library being loaded into ram?... That would explain the crashes..