Quel codice non fa quello che ti serve, ma è una buona base da cui partire per ottenere il comportamento ricercato
Vero il contatore va avanti o indietro sempre, invece a te serve selezionare se il conteggio deve essere avanti o indietro ma questo deve essere eseguito una volta sola all'interno del ciclo del loop.
Serve modificare la variabile counterFlag che deve essere un intero con segno, se contiene -1 deve decrementare piecesCounter, se contiene 1 deve incrementare piecesCounter, se invece è 0 non fa nulla, per cui devi scrivere le if (counterFlag == -1) else if (counterFlag == 1) e dentro le if devi azzerare counterFlag.
qui c'è pure da modifcare qualcosa, se P2_BUTTON è stato premuto bisogna uscire dal ciclo for con break
oviamente anche l'altro for va modificato allo stesso modo.
for(uint8_t i = 0; i < BUTTON_TIMEOUT; i++) {
if (!digitalRead(P2_BUTTON) { //questo blocco, se premo P1 incrementa counterFlag
counterFlag = INCREMENT;
break;
}
}
Le due if con il for dentro fanno questo, consideriamo solo la sequenza di P1 e P2.
if P1 è stato premuto entro nel ciclo for fino a che i non raggiunge BUTTON_TIMEOUT, se la raggiunge termina il ciclo senza fare nulla.
All'interno del ciclo viene testato P2, se premuto si imposta il counterFlag e termina il ciclo for con break;
Ciao.