Hola, tengo problemas para terminar el programa de mi robot esquiva obstáculos, si alguien me puede ayudar se lo agradecería. Consta de 3 ultrasonidos, uno en frente y los otros 2 a los costados, 2 motores con ruedas, 4 pilas, 1 regulador de tensión, 1 swich, una placa de prueba mediana y por ultimo una placa Arduino UNO. El problema que tengo con el código es que quiero que pueda girar para el lado donde haya mas distancia en lugar de solo para un sentido. Hasta ahora el robot esquiva pero siempre para el mismo sentido.
No tuve tiempo a poner los comentarios, este trabajo lo tengo que presentar hoy y estoy desesperado
int TRIG1 = 6;
int ECHO1 = 7;
int DURACION1;
int DISTANCIA1;
int TRIG2 = 2;
int ECHO2 = 3;
int DURACION2;
int DISTANCIA2;
int TRIG3 = 4;
int ECHO3 = 5;
int DURACION3;
int DISTANCIA3;
int VELOCIDAD;
int IN1 = 12;
int IN2 = 13;
int ENA = 11;
int IN4 = 8;
int IN3 = 9;
int ENB = 10;
void setup() {
pinMode (TRIG1, OUTPUT);
pinMode (ECHO1, INPUT);
}
void loop (){
VELOCIDAD = (170);
digitalWrite (TRIG1, HIGH);
delay (1);
digitalWrite (TRIG1, LOW);
DURACION1 = pulseIn (ECHO1, HIGH);
DISTANCIA1 = DURACION1 / 58.2;
if (( ( DISTANCIA1 ) >= (8) )) {
abAvance (VELOCIDAD);
}
else {
detieneAmbos ();
delay (1000);
aAvance (VELOCIDAD);
delay (750);
}
}
void abAvance (int veloc) {
digitalWrite (IN4, HIGH);
digitalWrite (IN3, LOW);
analogWrite (ENB, veloc);
digitalWrite (IN1, HIGH);
digitalWrite (IN2, LOW);
analogWrite (ENA, veloc);
}
void aAvance (int veloc) {
digitalWrite (IN4, LOW);
digitalWrite (IN3, HIGH);
analogWrite (ENB, veloc);
digitalWrite (IN1, HIGH);
digitalWrite (IN2, LOW);
analogWrite (ENA, veloc);
}
void bAvance (int veloc) {
digitalWrite (IN1, LOW);
digitalWrite (IN2, HIGH);
analogWrite (ENA, veloc);
digitalWrite (IN4, HIGH);
digitalWrite (IN3, LOW);
analogWrite (ENB, veloc);
}
void detieneAmbos () {
analogWrite (ENA, 0);
analogWrite (ENB, 0);
}
void miraIzquierda(){
digitalWrite (TRIG2, HIGH);
delay (1);
digitalWrite (TRIG2, LOW);
DURACION2 = pulseIn (ECHO2, HIGH);
DISTANCIA2 = DURACION2 / 58.2;
}
void miraDerecha () {
digitalWrite (TRIG3, HIGH);
delay (1);
digitalWrite (TRIG3, LOW);
DURACION3 = pulseIn (ECHO3, HIGH);
DISTANCIA3 = DURACION3 / 58.2;
}