Buenas.
Soy nuevo con Arduino y tengo unos problemas con el código que me están inquietando un poco. Les comento.
Tengo una placa Arduino Mega 2560, un sensor PING))) de Parallax y dos servomotores de 360 grados GWS S35/STD.
Lo que estoy intentando es hacer girar los servos de forma continuada mientras el "robot" esté a más de 20 cm de un obstaculo
y luego hacerlo retroceder, eso por ahora, ya cuando solvente los numerosos problemas pues hacerlo girar por el camino más
corto y que continúe, para que ande y ande sin tropezar.
Al hacer las pruebas con un servo todo marcha perfecto, responde superápido y ira en sentido contrario de inmediato. El problema
llega al conectar el segundo servo. El sensor deja de funcionar y como tengo puesto un If que dice que si los centímetros son menos
de 20 gire hacia atrás pues giran los dos, pero nunca dejan de girar en ese sentido porque el sensor no funciona y en el terminal
observo que siempre imprime 0 cm. Pongo en comentarios las lineas referentes al segundo servo y el sensor vuelve a funcionar.
#include <Servo.h>
//Declaramos dos objetos Servo, uno por cada motor
Servo servo1;
Servo servo2;
//pingPin = 7 para el PING)))
const int pingPin = 7;
long duration, cm;
void setup()
{
Serial.begin(9600);
pinMode(13, OUTPUT);
servo1.attach(3);
servo2.attach(5);
}
void loop()
{
//Este código del ejemplo PING del soft de Arduino 0022
pinMode(pingPin, OUTPUT);
digitalWrite(pingPin, LOW);
delayMicroseconds(2);
digitalWrite(pingPin, HIGH);
delayMicroseconds(5);
digitalWrite(pingPin, LOW);
pinMode(pingPin, INPUT);
duration = pulseIn(pingPin, HIGH);
cm = microsecondsToCentimeters(duration);
//Esta función para hacer girar el servo en una dirección o en otra.
//servo(servo1);
//servo(servo2);
//Esta función hace girar los dos servos, en un intento por ver si así
//no se fastidiaba el programa.
//servoDos(servo1, servo2);
Serial.print(cm);
Serial.print("cm");
Serial.println();
delay(150);
}
void servo(Servo ser)
{
if(cm >= 20)
{
ser.write(0);
}
if(cm <= 20)
{
ser.write(180);
}
}
void servoDos(Servo ser1, Servo ser2)
{
if(cm >= 20)
{
ser1.write(0);
ser2.write(180);
}
if(cm <= 20)
{
ser1.write(180);
ser2.write(0);
}
}
long microsecondsToCentimeters(long microseconds)
{
return microseconds / 29 / 2;
}
Aquí el código que empleo.
Otra cosa que he observado es que cuando están girando los dos servos uno va más rápido que el otro,
no mucho más, pero si lo suficiente como para que cuando monte el bot gire en círculos, ya que por
ahora solo pruebo las piezas poco a poco para que al montar vaya todo bien.
Si alguien pudiera ayudarme le estaría muy agradecido.
Gracias por adelantado.