Buenas tardes,
Antes de empezar a describir el problema quiero aclarar que soy un novato (la verdad es que mucho) y que había subido un topic parecido hace unos meses, por motivos personales tuve que dejarlo una temporada y ahora que me he decidido a continuarlo quiero probar un enfoque distinto.
Ahora el problemas: estoy creando un robot, a la hora de usar un solo módulo ultrasonido (conectado a una Mega) no he tenido problemas sin embargo al poner tres a la vez no funciona... Lo que se pretende es que se mueva hacia delante, si detecta un obstáculo frontal que retroceda, que gire a la derecha por ejemplo y que continué, si detecta un obstáculo por la derecha pues que gire a la izquierda y un obstáculo por la izquierda pues a la derecha. Luego tengo pensado ir añadiendo cosas para concederle mas autonomía pero de momento...
Les paso el código:
int IN1 = 22;
int IN2 = 23;
int IN3 = 24;
int IN4 = 25;
#include <NewPing.h>
#define TRIGGER_PIN 2
#define ECHO_PIN 3
#define TRIGGER_PIN2 4
#define ECHO_PIN2 5
#define TRIGGER_PIN3 6
#define ECHO_PIN3 7
#define MAX_DISTANCE 200
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
NewPing sonar1(TRIGGER_PIN2, ECHO_PIN2, MAX_DISTANCE);
NewPing sonar2(TRIGGER_PIN3, ECHO_PIN3, MAX_DISTANCE);
void setup() {
pinMode (IN1, OUTPUT); // entrada 1
pinMode (IN2, OUTPUT); // entrada 2
pinMode (IN3, OUTPUT); // entrada 3
pinMode (IN4, OUTPUT); // entrada 4
Serial.begin(115200);
}
void loop() {
Adelante ();
if(sonar.ping_cm() < 10)
{Atras();
delay(3000);
derecha();
delay(3000);
}
else{
Adelante();
}
if(sonar1.ping_cm() < 10)
{Derecha();
delay(3000);
}
else {
Adelante();
}
if(sonar2.ping_cm() < 10)
{Izquierda();
delay(3000);
}
else{
Adelante();
}
delay(1000);
Serial.print("Ping: ");
Serial.print(sonar.ping_cm());
Serial.println("cm");
delay(1000);
Serial.print("Ping1: ");
Serial.print(sonar1.ping_cm());
Serial.println("cm");
delay(1000);
Serial.print("Ping2: ");
Serial.print(sonar2.ping_cm());
Serial.println("cm");
}
void Adelante ()
{
//Direccion motor A
digitalWrite (IN1, HIGH);
digitalWrite (IN2, LOW);
//Direccion motor B
digitalWrite (IN3, HIGH);
digitalWrite (IN4, LOW);
}
void Atras ()
{
//Direccion motor A
digitalWrite (IN1, LOW);
digitalWrite (IN2, HIGH);
//Direccion motor B
digitalWrite (IN3, LOW);
digitalWrite (IN4, HIGH);
}
void Derecha ()
{
//Direccion motor A
digitalWrite (IN1, HIGH);
digitalWrite (IN2, LOW);
//Direccion motor B
digitalWrite (IN3, LOW);
digitalWrite (IN4, HIGH);
}
void Izquierda ()
{
//Direccion motor A
digitalWrite (IN1, LOW);
digitalWrite (IN2, HIGH);
//Direccion motor B
digitalWrite (IN3, HIGH);
digitalWrite (IN4, LOW);
}
void Parar ()
{
//Direccion motor A
digitalWrite (IN1, LOW);
digitalWrite (IN2, LOW);
//Direccion motor B
digitalWrite (IN3, LOW);
digitalWrite (IN4, LOW);
}
Agradecería mucho la ayuda ya que me encanta Arduino y es una pena quedar atrancado y espero que haya sido descriptivo con el problema, aun así sino se entiende por favor decirlo.