Hola a tod@s los forer@s.
Tengo 15 años, soy completamente novato en arduino y quería saber si alguien puede arrojar algo de luz a un proyecto que estoy haciendo para clase. He mirado los posts en el apartado de documentación y en software y no he encontrado respuesta aunque me parece raro. Perdón si no he buscado bien. Mi caso es que vi un videotutorial para hacer un coche teledirigido con arduino y un mando inalámbrico de Playstation 2, me pareció interesante y fácil, y quise probar.
Compré el arduino uno, motor control shield, 2 motores dc, la placa para montarlo todo y soldé un conector con una pila de 9v. A esto añadí un mando inalámbrico no original de mi PS2. También lo he probado con mando alámbrico original pero tampoco funciona.
Tengo conectados 5 pines del mando inalámbrico (6 en caso del alámbrico) al motorshield según indicaban en el tutorial (según librería PS2). Los motores conectados a M3 y M4 e incluida librería de motores. Copié el código que indicaban en el tutorial pero no funcionaba. He ido investigando en páginas y con compañeros y modificando el código probando varias cosas pero no encuentro la solución. El código es este:
#include <PS2X_lib.h>
#include <AFMotor.h>
PS2X ps2x;
AF_DCMotor motor1(3);
AF_DCMotor motor2(4);
int error = 0;
byte type = 0;
byte vibrate = 0;
void setup()
{
Serial.begin(9600);
Serial.println("Motor test!");
motor1.setSpeed(250);
motor2.setSpeed(250);
error = ps2x.config_gamepad(A3,A1,A0,A2, true, true); //(clock, command, attention, data)
if(error == 0)
{
Serial.println("Controlador encontrado y configurado");
}
else
{
Serial.println("Error, mando no encontrado");
}
}
void loop()
{
int temp;
ps2x.read_gamepad(false,vibrate);
vibrate = ps2x.Analog(PSAB_BLUE);
if(ps2x.Button(PSB_PAD_UP))
{
temp = ps2x.Analog(PSAB_PAD_UP), DEC;
Serial.print("Presionaste el boton arriba: ");
Serial.println(temp);
motor1.run(FORWARD);
motor2.run(FORWARD);
motor1.setSpeed(temp);
motor2.setSpeed(temp);
}
else if(ps2x.Button(PSB_PAD_DOWN))
{
temp = ps2x.Analog(PSAB_PAD_DOWN), DEC;
Serial.print("Presionaste el boton abajo: ");
Serial.println(temp);
motor1.run(BACKWARD);
motor2.run(BACKWARD);
motor1.setSpeed(temp);
motor2.setSpeed(temp);
}
else if(ps2x.Button(PSB_PAD_LEFT))
{
temp = ps2x.Analog(PSAB_PAD_LEFT), DEC;
Serial.print("Presionaste izquierda");
Serial.println(temp);
motor1.run(BACKWARD);
motor2.run(FORWARD);
motor1.setSpeed(temp);
motor2.setSpeed(temp);
}
else if(ps2x.Button(PSB_PAD_RIGHT))
{
temp = ps2x.Analog(PSAB_PAD_RIGHT), DEC;
Serial.print("Presionaste derecha");
Serial.println(temp);
motor1.run(FORWARD);
motor2.run(BACKWARD);
motor1.setSpeed(temp);
motor2.setSpeed(temp);
}
else
{
motor1.run(RELEASE);
motor2.run(RELEASE);
}
delay(50);
}
Con ese código, cuando presiono el pad del mando inalámbrico de PS2 veo el texto "Presionaste el botón arriba", lo mismo abajo, izquierda y derecha. Pero el robot no se mueve. Interpreto entonces que el arduino y el mando están bien, la librería de PS2 es correcta y que las conexiones están bien hechas. Podría ser un fallo de programación, de librería de motores incorrecta, de corriente insuficiente o de estar mal conexionados los motores. Para verificar esto le puse un código simple que sólo arranca los motores:
#include <AFMotor.h>
AF_DCMotor motor1(3);
AF_DCMotor motor2(4);
void setup()
{
motor1.setSpeed(250);
motor2.setSpeed(250);
}
void loop()
{
motor1.run(FORWARD);
motor2.run(FORWARD);
}
Al subir este código al Arduino el robot funciona correctamente, pero claro, no lo puedo dirigir con el mando. Entonces deduzco que los motores están bien conexionados, la librería de motores es correcta y la corriente (9v al arduino) también es correcta. Lo único que se me ocurre que pueda estar mal es el código, pero no se dónde. O igual hay algún otro problema que desconozco.
Desde ya muchas gracias por vuestro tiempo.