Error con codigo para "mover" LEDS

Tengo que resolver el siguiente ejercicio, pero al resolverlo no puedo hacer que se muevan para la izquierda o para la derecha las luces. Por debajo esta la consigna junto con el código.

/*Al encender la placa, los 4 LEDs deben encenderse al mismo
tiempo durante dos segundos. Pasados los dos segundos del punto
anterior, se debe encender solo el LED que está más a la
izquierda. En este punto se puede usar la función delay()

Una vez que se completa la “secuencia” descrita en el punto
anterior, los dos pulsadores deberán funcionar para “mover” la
luz. Esto quiere decir que, si presiono el pulsador de la
izquierda, el LED que está encendido debe apagarse, y encenderse
el que se encuentra a la izquierda. Al presionar el pulsador
de la derecha, se debe apagar el LED que se encuentra encendido,
y encenderse el que está a la derecha.

Cuando se presione el botón de la izquierda y el LED encendido
sea el de más a la izquierda, o cuando se presione el botón de
la derecha y el LED encendido sea el de más a la derecha, la placa
no deberá realizar ninguna acción (no se tiene que “mover la luz”
para ningún lado).*/

int velocidad = 2000;
int ledEncendido = 11;
int boton1Antes = LOW;
int boton2Antes = LOW;
int cortar=0;

void setup()
{
Serial.begin(9600);
for(int i=8; i<12; i++)
{
pinMode(i, OUTPUT); //son de salida: 1 encendido, 0 apagado
}

for(int i=3; i<5; i++)
{
pinMode(i, OUTPUT); //son de entrada: 1 encendido, 0 apagado
}

}

void loop()
{

int encender = digitalRead(ledEncendido);
int boton1 = digitalRead(4);
int boton2 = digitalRead(3);

if(cortar == 0)
{
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);

delay(2000);

digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);

cortar++;

delay(2000);

}

if(boton1 == HIGH && boton1Antes == LOW)
{
digitalWrite(ledEncendido, LOW);
Serial.println(ledEncendido);

ledEncendido = ledEncendido + 1;
Serial.println(ledEncendido);

if(ledEncendido > 11)
{
  ledEncendido = 11;
}
digitalWrite(ledEncendido, HIGH);

}
boton1Antes = boton1;

if(boton2 == HIGH && boton2Antes == LOW)
{
digitalWrite(ledEncendido, LOW);

ledEncendido = ledEncendido - 1;

if(ledEncendido < 8)
{
  ledEncendido = 8;
}
digitalWrite(ledEncendido, HIGH);

}
boton2Antes = boton2;
delay(50);

}

Hola te dejo el codigo corregido y comentadas las correcciones.

int velocidad = 2000;
int ledEncendido = 11;
//int boton1Antes = LOW; NO HACE FALTA
//int boton2Antes = LOW; NO HACE FALTA
//int cortar = 0; NO HACE FALTA

void setup()
{
  Serial.begin(9600);
  for (int i = 8; i < 12; i++)
  {
    pinMode(i, OUTPUT); //son de salida: 1 encendido, 0 apagado
  }

  for (int i = 3; i < 5; i++)
  {
//  si son de entrada los tienes que definir como IMPUT    
//  pinMode(i, OUTPUT); //son de entrada: 1 encendido, 0 apagado
    pinMode(i, INPUT); //son de entrada: 1 encendido, 0 apagado
  }
//if (cortar == 0)Ya no hace falta al meterlo en el setup lo hace solo una vez
    digitalWrite(8, HIGH);
    digitalWrite(9, HIGH);
    digitalWrite(10, HIGH);
    digitalWrite(11, HIGH);

    delay(2000);

    digitalWrite(8, LOW);
    digitalWrite(9, LOW);
    digitalWrite(10, LOW);

//    cortar++; NO HACE FALTA

    delay(2000);
}

void loop()
{

// int encender = digitalRead(ledEncendido);¿Para que si no la usas?
  int boton1 = digitalRead(4);
  int boton2 = digitalRead(3);

  
// ¿para que compararlo con el estado anterior?
//  if (boton1 == HIGH && boton1Antes == LOW)
    if (boton1 == HIGH)
  {
    digitalWrite(ledEncendido, LOW);
    Serial.println(ledEncendido);

    ledEncendido = ledEncendido + 1;
    Serial.println(ledEncendido);

    if (ledEncendido > 11)
    {
      ledEncendido = 11;
    }
    digitalWrite(ledEncendido, HIGH);
  }
//  boton1Antes = boton1;NO HACE FALTA
// ¿para que compararlo con el estado anterior?
//  if (boton2 == HIGH && boton2Antes == LOW)
    if (boton2 == HIGH)
  {
    digitalWrite(ledEncendido, LOW);

    ledEncendido = ledEncendido - 1;

    if (ledEncendido < 8)
    {
      ledEncendido = 8;
    }
    digitalWrite(ledEncendido, HIGH);
  }
//  boton2Antes = boton2;NO HACE FALTA
  delay(velocidad); //¿Para esto definiste la variable velocidad?,¿o no?

}

Saludos.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.