CocheProgramable

 /***   Included libraries  ***/
#include <BitbloqSoftwareSerial.h>
/***   Global variables and function definition  ***/
uint8_t boton = 52;
uint8_t lediz = 51;
uint8_t leddch = 53;
bqSoftwareSerial puerto_serie(0, 1, 9600);
uint8_t potenciometro = A1;
uint8_t IN1izRetro = 3;
uint8_t IN2izAlante = 4;
uint8_t IN3dchRetro = 5;
uint8_t IN4dchAlante = 6;
uint8_t ENAiz = 8;
uint8_t ENBdch = 9;
int Piladirecion[100];
float leoboton = 1;
int marcha = 0;
float mover = 0;
auto Boton = digitalRead(boton);
float estado = 0;
auto Potenciometro = analogRead(potenciometro);
int i = 0;
void Borrotabla() {
    i = 0;
    while (i < 99) {
        Piladirecion[i] = 0;
        i = i + 1;
    }
    i = 0;
}
void motor() {
    switch (marcha) {
         case 0:
            digitalWrite(lediz, LOW);
            digitalWrite(leddch, LOW);
            digitalWrite(IN1izRetro, LOW);
            digitalWrite(IN2izAlante, LOW);
            digitalWrite(IN3dchRetro, LOW);
            digitalWrite(IN4dchAlante, LOW);
            break;
        case 1:
            digitalWrite(lediz, LOW);
            digitalWrite(leddch, HIGH);
            digitalWrite(IN1izRetro, LOW);
            digitalWrite(IN3dchRetro, HIGH);
            digitalWrite(IN4dchAlante, LOW);
            digitalWrite(IN2izAlante, HIGH);
            break;
        case 2:
            digitalWrite(lediz, HIGH);
            digitalWrite(leddch, HIGH);
            digitalWrite(IN1izRetro, LOW);
            digitalWrite(IN3dchRetro, LOW);
            digitalWrite(IN2izAlante, HIGH);
            digitalWrite(IN4dchAlante, HIGH);
            break;
        case 3:
            digitalWrite(lediz, HIGH);
            digitalWrite(leddch, LOW);
            digitalWrite(IN1izRetro, HIGH);
            digitalWrite(IN2izAlante, LOW);
            digitalWrite(IN3dchRetro, LOW);
            digitalWrite(IN4dchAlante, HIGH);
            break;
        case 4:
            digitalWrite(lediz, LOW);
            digitalWrite(leddch, LOW);
            digitalWrite(IN4dchAlante, LOW);
            digitalWrite(IN2izAlante, LOW);
            digitalWrite(IN1izRetro, HIGH);
            digitalWrite(IN3dchRetro, HIGH);
            break;
    }
}

void llenarpila() {
    leoboton = Potenciometro;
        
    while (Potenciometro == leoboton) {
        Boton = digitalRead(boton);
        while (digitalRead(boton) == 1) {
            estado = 1;
        }
        if (estado == 1) {
            Piladirecion[i] = Potenciometro;
            i = i + 1;
            estado = 0;
        }
        Potenciometro = map(analogRead(potenciometro), 0, 1020, 0, 5);
    }
}

/***   Setup  ***/
void setup() {
    pinMode(boton, INPUT);
    pinMode(lediz, OUTPUT);
    pinMode(leddch, OUTPUT);
    puerto_serie.begin(9600);
    pinMode(potenciometro, INPUT);
    pinMode(IN1izRetro, OUTPUT);
    pinMode(IN2izAlante, OUTPUT);
    pinMode(IN3dchRetro, OUTPUT);
    pinMode(IN4dchAlante, OUTPUT);
    pinMode(ENAiz, OUTPUT);
    pinMode(ENBdch, OUTPUT);
    analogWrite(ENAiz, 120);
    analogWrite(ENBdch, 120);
    Borrotabla();
}
/***   Loop  ***/
void loop() {
    Potenciometro = map(analogRead(potenciometro), 0, 1023, 0, 5);
    puerto_serie.print(analogRead(potenciometro));
    puerto_serie.println(Potenciometro);
    marcha = 0;
//    motor();
    switch (int(Potenciometro)) {
        case 0:
            digitalWrite(lediz, LOW);
            digitalWrite(leddch, LOW);
            mover = digitalRead(boton);
            while (digitalRead(boton) == 1) {
                
            }
            if (mover == 1) {
                i = 0;
                while (Piladirecion[i] > 0) {
                  marcha = Piladirecion[i];
                  motor();
                  delay(500);
                  i = i + 1;
                }
                mover = 0;
                Borrotabla();
            }
            marcha = 0;
            motor();
            break;
        case 1:
            digitalWrite(lediz, HIGH);
            digitalWrite(leddch, LOW);
            llenarpila();
            break;
        case 2:
            digitalWrite(lediz, HIGH);
            digitalWrite(leddch, HIGH);
            llenarpila();
            break;
        case 3:
            digitalWrite(lediz, LOW);
            digitalWrite(leddch, HIGH);
            llenarpila();
            break;
        case 4:
            digitalWrite(lediz, LOW);
            digitalWrite(leddch, LOW);
            llenarpila();
            break;
    }
}