Las conexiones parecen correctas, yo mas bien creo que es un fallo de programacion. El problema de hacer la lectura de un boton con un simple digitalRead() es que la placa puede leerlo miles de veces por segundo disparando su accion y si encima usas delay() la cosa se puede desmadrar mucho.
Mirate este codigo de un detector de cambio de estado para un pulsador:
Y si es posible en lugar de delay() utiliza controles por tiempo como el del ejemplo BlinkWhioutDelay