El programa Arduino no incrementa el contador de bucle

2

Estoy programando efectos para un cubo LED. El cubo y las funciones independientes funcionan correctamente. El problema se produce cuando invoco la función turnon_layer en un bucle. El contador de bucles no se incrementa.

for(i=0; i<4; i++)
{
  Serial.println(i);
  turnon_layer(1000,i);
}

El monitor Serial muestra que i tiene un valor constante de 0 en todo.

Cuando llamo a las funciones con constantes, la salida es la esperada.

turnon_layer(1000,0);
turnon_layer(1000,1);
turnon_layer(1000,2);
turnon_layer(1000,3);

Mi función turnon_layer es:

void turnon_layer(long time, int layer)
{
  boolean state = HIGH;
  long wait, start = millis();
  for(i=0; i<4; i++)
  {
      if(i!=layer) digitalWrite(levelPin[i], !LOW);
      else digitalWrite(levelPin[i], !HIGH);
  }

  if(time/2<10)  wait = time/2;
  else  wait = 10;

  while(millis()-start<time)
  {
    state = !state;
    //Serial.println(state);
    //First 8 LEDs
    for(i=0;i<2;i++)
    for(j=0;j<4;j++)
    digitalWrite(ledPin[i][j],state);

    //Next 8 LEDs
    for(i=2;i<4;i++)
    for(j=0;j<4;j++)
    digitalWrite(ledPin[i][j],!state);
    delay(wait);
  }
}

Estoy usando el IDE de Arduino.

¿Qué está mal? ¿Por qué?

    
pregunta asheeshr

1 respuesta

4

¿Se declara la variable i como una variable global ? es decir, en la parte superior del archivo fuera de todos los métodos?

Es posible que se sobrescriba por el bucle dentro de su método turnon_layer() .

Para probar, solo cambia la variable a la letra k dentro de solo uno de tus bucles.

    
respondido por el Marko

Lea otras preguntas en las etiquetas