Funzione Clock

Buon Giorno, Il programmino qui di seguito comanda in IC 4017 premendo il pulsante mi aspetto che la barra led accenda un led dopo l'altro. questo non succede, passa dal primo al secondo e li si ferma. La barra e composta da 5 led.

Mi stavo chiedendo la Funzione Clock puo essere comandata da un pulsante.

Grazie a quanti vorranno aiutarmi a capire.

Sergio

int clockPinA = 2;
int P6 = 4;


int valPA = 0;
int vecchio_statusA = 0;
int statoA = 0;     // ricorda lo stato in cui si trova il led, stato = 0 led spento, stato = 1 led acceso



void setup() {
  pinMode(clockPinA, OUTPUT);
  pinMode(P6, INPUT);

  
}

void loop() {
  //==================================================================
  valPA = digitalRead(P6);
  delay(15);
  if ((valPA == HIGH) && (vecchio_statusA == 0)) {
    statoA = 1 - statoA;
    vecchio_statusA = valPA;
    if (statoA == 1)
    
    digitalWrite (clockPinA, HIGH);
    delay(150);
    digitalWrite (clockPinA, LOW);
    delay(150);
  }

}
if (statoA == 1)

Sembrerebbe che dopo questa riga ne manchi una, o un intero blocco... Forse hai copiato male lo sketch?

questo e il listato:

int clockPinA = 2;
int P6 = 4;
int valPA = 0;
int vecchio_statusA = 0;
int statoA = 0;     // ricorda lo stato in cui si trova il led, 
                    //stato = 0 led spento, stato = 1 led acceso
void setup() {
  pinMode(clockPinA, OUTPUT);
  pinMode(P6, INPUT);
}
void loop() {
//===================================================
  valPA = digitalRead(P6);
  delay(15);
  if ((valPA == HIGH) && (vecchio_statusA == 0)) {
    statoA = 1 - statoA;
    vecchio_statusA = valPA;
    if (statoA == 1)
    digitalWrite (clockPinA, HIGH);
    delay(150);
    digitalWrite (clockPinA, LOW);
    delay(150);
  }
}

Sì ok, ma da dove arriva? Ribadisco che sembra incompleto.

Una if senza graffe, influenza solo la prima riga successiva.

Ovvero questo:

if (statoA == 1)
digitalWrite (clockPinA, HIGH);
delay(150);
digitalWrite (clockPinA, LOW);
delay(150);

Equivale a:

if (statoA == 1)
{ digitalWrite (clockPinA, HIGH);
}
delay(150);
digitalWrite (clockPinA, LOW);
delay(150);

Forse volevi scrivere:

if (statoA == 1)
{ digitalWrite (clockPinA, HIGH);
  delay(150);
} 
else
{ digitalWrite (clockPinA, LOW);
  delay(150);
}
if (statoA == 1){
   digitalWrite (clockPinA, HIGH);
   delay(150);
   digitalWrite (clockPinA, LOW);
   delay(150);
}

forse così