I say again this code ...
unsigned long currentMillis = millis();
if ( currentMillis - previousMillis > interval )
{
previousMillis = currentMillis;
}
... performs absolutely NO USEFUL PURPOSE and might as well be replaced with ...
// WHAT ARE YOU LOOKING AT, NOTHING TO SEE HERE CARRY ON
... or, a lot less typing ...
Then I have qqusestion about this ...
else if ( key == '*' )
{
// decrement binary counter
for ( counter; counter < sum; counter-- ) // << DOES COUNTER HAVE A USEFUL VALUE HERE
{