Tengo un Arduino mega 2560 conectado a un robot de 4 ruedas (similar a esto: enlace ).
El Pin 9 en el Arduino está conectado a las ruedas delanteras del robot para moverse hacia la izquierda o hacia la derecha.
El Pin 10 en el Arduino está conectado a las ruedas traseras para el movimiento hacia adelante.
He enviado con éxito las señales "IZQUIERDA" y "DERECHA" al arduino y he conseguido que el robot gire a la izquierda y a la derecha, respectivamente.
Sin embargo, estoy luchando para tener el control en el pin 10 que controla el movimiento hacia adelante / hacia atrás. Cuando envío cualquier señal a través del pin 10, el robot mueve las ruedas hacia adelante a la velocidad máxima. No puedo dejar que el robot se siente en una mesa para probar porque se sale de control. Tengo que levantarlo físicamente de la mesa para que las ruedas no toquen el suelo al probar el pin 10.
Aquí está el código que funciona correctamente para las señales de izquierda y derecha:
#include <Servo.h>
Servo myservo; // create servo object to control a servo
void setup()
{
Serial.begin(9600);
Serial.println("Hello Pi");
Serial.println("attaching to pin 9");
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop()
{
if (Serial.available())
{
char command = Serial.read();
if (command=='L'){
turn_left();
delay(5000);
}
else if (command=='R'){
turn_right();
delay(5000);
}
}
}
void turn_left(){
myservo.write(500);
}
void turn_right(){
myservo.write(0);
}
Y aquí está el código para avanzar que no funciona
#include <Servo.h>
Servo myservo; // create servo object to control a servo
void setup()
{
Serial.begin(9600);
Serial.println("Hello Pi");
Serial.println("attaching to pin 10");
myservo.writeMicroseconds(544); // im confused what this does..
myservo.attach(10); // attaches the servo on pin 10 to the servo object
}
void loop()
{
if (Serial.available())
{
char command = Serial.read();
if (command=='L'){
move_forward(); // right now does the same thing is move_backward()
delay(5000);
}
else if (command=='R'){
move_backward(); // right now does the same thing as move_forward()
delay(5000);
}
}
}
void turn_left(){
myservo.write(500);
}
void turn_right(){
myservo.write(0);
}
// as soon as either of the two functions below is invoked
// the robot goes at MAXIMUM speed forward. I have no clue how to slow it down.
void move_forward(){
myservo.write(0);
}
void move_backward(){
myservo.write(0);
}