Problema di programmazione.

MauroTec:
La prima cosa che farei e quella di rivedere i tipi delle variabili. Se la variabile conterrà il valore massimo di 255 si usa il tipo byte che è una ridefinizione del tipo char. Se non si prevede che la variabile conterrà valori negativi il tipo deve essere "unsigned", quindi "unsigned byte" indica una variabile di 8 bit senza segno che può contenere il valore massimo 255, se mancasse "unsigned" il massimo valore positivo contenibile sarebbe 127 e 128 negativo. Stessa cosa per int il quale è grande 16 bit.

Attento Mauro, che su Arduino "byte" è un alias per unsigned char. Quindi con byte già si dichiara un char di tipo senza segno capace di memorizzare un valore da 0 a 255.
Invece per int (e long) vale il dover usare unsigned se non si vogliono i valori negativi.