/*Velocidad y Direccion*/
int pulsadorizq = 2;
int pulsadorder = 3;
int pot = A0;
int IN3 = 7;
int IN4 = 8;
int ENB = 9;
int statusizq;
int statusder;
int value;
int total;
/*Sensores*/
const int entrada1 = A1;
const int entrada2 = A2;
const int entrada4 = A4;
int estado1, estado1Ant;
int estado2, estado2Ant;
int estado4, estado4Ant;
bool iniciaAccion = false;
unsigned long inicioTime;
byte modo = 0;

void setup() {
  /*Velocidad y Direccion*/
  pinMode(pulsadorizq, INPUT);
  pinMode(pulsadorder, INPUT);
  pinMode(pot, INPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
  pinMode(ENB, OUTPUT);
  /*Sensores*/
  pinMode(entrada1, INPUT_PULLUP);
  pinMode(entrada2, INPUT_PULLUP);
  pinMode(entrada4, INPUT_PULLUP);
  Serial.begin(115200);
}

void loop() {
  /*Sensores*/
  estado1 = digitalRead(entrada1);
  if (!estado1 && estado1Ant) {      /*Detecta Objeto*/
    Serial.println("Enciendo motor x IR1");
    digitalWrite(IN3, HIGH); /*Enciende Motor*/
    digitalWrite(IN4, LOW);
  }
  estado1Ant = estado1;

  estado2 = digitalRead(entrada2);
  if (!estado2 && estado2Ant) {     /*Detecta Objeto*/
      Serial.println("Secuencia Motor 4seg IR2");
      iniciaAccion = true;
      modo = 0;
  }
  estado2Ant = estado2;
  if (iniciaAccion ) {
    switch (modo) {
      case 0: Serial.println("apago motor x IR2");
              digitalWrite(IN3, LOW); /*Apaga el motor*/
              digitalWrite(IN4, LOW);
              inicioTime = millis();
              modo = 1;
              break;
      case 1: if (millis() - inicioTime > 4000UL){
                  Serial.println("Enciendo motor x IR2");
                  digitalWrite(IN3, HIGH); /*Deberia encender el motor*/
                  digitalWrite(IN4, LOW);
                  modo = 2;
              }
              break;
      case 2: modo = 0;
              Serial.println("Dejo listo para proxima acción");
              iniciaAccion = false;
              break;
    }
  }

  estado4 = digitalRead(entrada4);
  if (!estado4 && estado4Ant) {     /*Detecta Objeto*/
      Serial.println("Apaga motor x IR4");
      digitalWrite(IN3, LOW); /*Apaga Motor*/
      digitalWrite(IN4, LOW);
  }
  estado4Ant = estado4;

  /*Velocidad y Direccion*/
  statusizq = digitalRead(pulsadorizq);
  statusder = digitalRead(pulsadorder);
  value = analogRead(pot);
  total = map(value, 0, 1023, 0, 255);
  analogWrite(ENB, total);
  //Serial.println(total);
  if (statusizq == HIGH) {
    digitalWrite(IN3, HIGH);
    digitalWrite(IN4, LOW);
  } else {
    if (statusder == HIGH) {
      digitalWrite(IN3, LOW);
      digitalWrite(IN4, HIGH);
    }
  }
  delay(100);
}