/*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);
}