Hola buenos días, mi profesor de digitales me ha dejado la tarea de crear una secuencia para encender 5 Leds con dos pulsadores configurados en modo pull-up de tal forma que con un pulsador se encienda un Led a la vez hacia la derecha y con el otro pulsador encienda hacia la izquierda. De hecho lo resolví de forma mucho mas sencilla (con la sentencia "switch" y "case") pero el profesor quiere que específicamente lo resolvamos con lo que el hasta ahora nos a enseñado y nos dio un código base:
#define PULSADOR_ASENDENTE 2
#define PULSADOR_DESENDENTE 3
#define LED_1 4
#define LED_2 5
#define LED_3 6
#define LED_4 7
#define LED_5 8
int IFO_PULSADOR_A =0;
int IFO_PULSADOR_D =0;
int DESENDENTE =0;
int ASENDENTE =0;
void setup()
{
pinMode(LED_1, OUTPUT);
pinMode(LED_2, OUTPUT);
pinMode(LED_3, OUTPUT);
pinMode(LED_4, OUTPUT);
pinMode(LED_5, OUTPUT);
pinMode(PULSADOR_ASENDENTE, INPUT);
pinMode(PULSADOR_DESENDENTE, INPUT);
}
void loop()
{
INICIO:
IFO_PULSADOR_D=digitalRead(PULSADOR_DESENDENTE);
if(IFO_PULSADOR_D == LOW) //esta oprimido
{
ESPERAR_DESENDENTE:
IFO_PULSADOR_D=digitalRead(PULSADOR_DESENDENTE);
if(IFO_PULSADOR_D == HIGH) //esta suelto
{
DESENDENTE=ASENDENTE-1;
if(ASENDENTE<=0)
{
ASENDENTE=5;
goto RUTINAS;
}
goto RUTINAS;
}
goto ESPERAR_DESENDENTE;
}
goto INICIO;
//RUTINAS DEL PROGRAMA
RUTINAS:
if(ASENDENTE == 1)
{
goto RUTINA_1;
}
if(ASENDENTE == 2)
{
goto RUTINA_2;
}
if(ASENDENTE == 3)
{
goto RUTINA_3;
}
if(ASENDENTE == 4)
{
goto RUTINA_4;
}
if(ASENDENTE == 5)
{
goto RUTINA_5;
}
RUTINA_1:
digitalWrite(LED_1, HIGH);
digitalWrite(LED_2, LOW);
digitalWrite(LED_3, LOW);
digitalWrite(LED_4, LOW);
digitalWrite(LED_5, LOW);
delay(500);
goto INICIO;
RUTINA_2:
digitalWrite(LED_1, LOW);
digitalWrite(LED_2, HIGH);
digitalWrite(LED_3, LOW);
digitalWrite(LED_4, LOW);
digitalWrite(LED_5, LOW);
delay(500);
goto INICIO;
RUTINA_3:
digitalWrite(LED_1, LOW);
digitalWrite(LED_2, LOW);
digitalWrite(LED_3, HIGH);
digitalWrite(LED_4, LOW);
digitalWrite(LED_5, LOW);
delay(500);
goto INICIO;
RUTINA_4:
digitalWrite(LED_1, LOW);
digitalWrite(LED_2, LOW);
digitalWrite(LED_3, LOW);
digitalWrite(LED_4, HIGH);
digitalWrite(LED_5, LOW);
delay(500);
goto INICIO;
RUTINA_5:
digitalWrite(LED_1, LOW);
digitalWrite(LED_2, LOW);
digitalWrite(LED_3, LOW);
digitalWrite(LED_4, LOW);
digitalWrite(LED_5, HIGH);
delay(500);
goto INICIO;
}
El problema es que no consigo que los Leds se enciendan de izquierda a derecha o como esta en código de forma DESENDENTE.
Agradezco mucho si alguien me puede ayudar.