Nota
Per come sono costruiti i pulsanti presentano il cosiddetto effetto rimbalzo, ovvero non appena premuti, nei primi millisecondi, generano rumore che potrebbe dare false letture.
Per alcuni il modo per superare questo problema può essere quello di ripetere la lettura dell’input a distanza di qualche millisecondo e verificare se sono uguali
...
void loop(){
val1 = digitalRead(pinPulsante); // legge il valore
delay(10); // aspetta 10 millisecondi
val2 = digitalRead(pinPulsante); // rilegge il valore
if (val1 == val2) { // se i due valori sono uguali...
etc. etc.
Per altri basterebbe introdurre una pausa opportuna, ad esempio 100-300 ms, fra una lettura dello stato dell’interruttore e la successiva.
http://mbortolotti.blogspot.com/2012/01/led-e-pulsante-digital-inputcontinua.html?m=1
https://www.arduino.cc/reference/en/language/functions/math/constrain/