Robot - detector distancia

Hola, soy una estudiante de bachillerato y aún no estoy familiarizada con arduino. Estoy haciendo un robot básico que por ahora lleva un detector de distancia y dos servos que están ya a un chasis. De momento he conseguido que mida la distancia y que si no es suficientemente grande gire y vaya hacia otro lado. Ahora quiero mejorarlo y quiero que pueda coger la distancia de los dos lados y que decida girar y seguir hacia el lado con más distancia. Os dejo el código que tengo por ahora, pero no se como hacer esto que os digo y me he quedado bloqueada.

#include <Servo.h>
Servo ServoDerecha;
Servo ServoIzquierda;
int trigPin = 9;
int echoPin = 10;


long duration, distance;

void setup() {
 ServoDerecha.attach(2);
  ServoIzquierda.attach(3);

delay(random(500,2000));
Serial.begin(9600);

pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}

void loop() {

 digitalWrite(trigPin, LOW);
 delayMicroseconds(2);
 digitalWrite(trigPin, HIGH);
 delayMicroseconds(10);
 duration = pulseIn(echoPin, HIGH);
 distance = duration / 58.2;
 delay(10);

 if (distance > 30)
 {
      ServoDerecha.write(180);
           ServoIzquierdae.write(0);
      ServoIzquierda.write(90);
      delay(500);
         ServoIzquierda.write(0);
      ServoIzquierda.write(180);
      delay(600);
         ServoDerecha.write(90);
      ServoIzquierda.write(90);
      delay(300);
         ServoDerecha.write(180);
      ServoIzquierda.write(180);
      delay(1000);
   
}
 

 if (distance < 30)
 {        
   ServoDerecha.write(90);
         ServoIzquierda.write(90);
   ServoIzquierda.write(90);
   delay(500);
      ServoDerechawrite(0);
   ServoIzquierda.write(180);
   delay(600),
      ServoDerecha.write(90);
   ServoIzquierda.write(90);
   delay(300);
      ServoDerecha.write(180);
   ServoIzquierda.write(180);
   delay(1000);
}
}

Muchas gracias.

Moderador:
En el título no debe usarse la palabra Ayuda y debe ser descriptivo del tema o consulta que haces. En tu caso no lo es. Edita!!
Te sugiero : Robot con deteccion de distancia

Los códigos deben postearse usando etiquetas, por favor edita tmb.

Lee las Normas del foro

Me gustaría ayudarte pero no entiendo la lógica que estas siguienteo por falta de comentarios.

Solo para ordenar en algo tu código hice esta modificación que no altera lo que tienes hasta ahora.
También es importante que lo presentes con cierto orden o sangría. Ayuda a comprender mejor.
Yendo al punto, mira la situación de cuando encuentra un obstáculo a mas de 30 cmts.
Qué hace? traduce los movimientos.
Mi consejo es que escribas rutinas que digan, voy hacia adelante, voy hacia atras, giro derecha, giro izquierda.

#include <Servo.h>
Servo ServoDerecha;
Servo ServoIzquierda;
int trigPin = 9;
int echoPin = 10;
long duration, distance;

void setup() {
  ServoDerecha.attach(2);
  ServoIzquierda.attach(3);

  delay(random(500,2000));
  Serial.begin(9600);

  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}

void loop() {

  ultrasonico();

  if (distance > 30) {
      ServoDerecha.write(180);
      ServoIzquierda.write(0);
      ServoIzquierda.write(90);
      delay(500);
      ServoIzquierda.write(0);
      ServoIzquierda.write(180);
      delay(600);
      ServoDerecha.write(90);
      ServoIzquierda.write(90);
      delay(300);
      ServoDerecha.write(180);
      ServoIzquierda.write(180);
      delay(1000);
  }

  if (distance < 30)  {        
      ServoDerecha.write(90);
      ServoIzquierda.write(90);
      ServoIzquierda.write(90);
      delay(500);
      ServoDerecha.write(0);
      ServoIzquierda.write(180);
      delay(600),
      ServoDerecha.write(90);
      ServoIzquierda.write(90);
      delay(300);
      ServoDerecha.write(180);
      ServoIzquierda.write(180);
      delay(1000);
  }
}

void ultrasonico() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  duration = pulseIn(echoPin, HIGH);
  distance = duration / 58.2;
}

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.