@stefan:
sehr gut, deine log Tabelle.
Als Krümelkacker sehe ich,
dass ... 20, 22, 25, 28, 30, 33 ...
eher ... 20, 22, 24, 27, 30, 33 ...
sein sollte
Auch ist es kein int array sondern ein byte array, und gehört eigentlich ins PROGMEM.
Ich nehme mal an, Schritte ist eine Zahl ~ 100, damit man bei 30 bps auch Zeit hat, den Effekt zu geniessen.
(neu-alt)/Schritte ist in der Regel eine konstante 0, bei einer Integer-Operation. ( während der gesamten Überblendung )
geht also so nicht.
Probier mal:
zwischenwert = alt + (neu-alt)*n / Schritte;
"Schritte" als Zweierpotenz sind dem Controller und Compiler am liebsten ( 32, 64, 128, 256 )
/256 ist noch nicht mal ein Shift, sondern nur ein byte wegschmeissen