Buenos días:
-He buscado un programa por internet, que me permite mover por medio de un Joystick dos motores DC de 12V. Y lo que me sucede, es que al posicionar el Joystick en reposo, los motores siguen su curso, cuando deberían de estar parados.
Adjunto programa, para por si acaso alguno me puede ayudar.
Gracias¡¡¡¡
int enA = 9;
int in1 = 8;
int in2 = 7; //para el motor A
int enB = 3; //para el motor B más adelante.
int in3 = 5;
int in4 = 4;
int joyVert = A0; // joystick vertical
int joyHorz = A1; // joystick horizontal
int MotorSpeed1 =0; // velocidad del motor al comenzar
int MotorSpeed2 =0;
int joyposVert = 512; // lectura del joystick en 512
int joyposHorz = 512;
void setup ()
{
pinMode(enA,OUTPUT);// declara el tipo de variables que es, INPUT entradas OUTPUT salidas
pinMode(enB,OUTPUT);
pinMode(in1,OUTPUT);
pinMode(in2,OUTPUT);
pinMode(in3,OUTPUT);
pinMode(in4,OUTPUT);
digitalWrite(enA,LOW);// para el motor A que utilizamos al principio
digitalWrite(in1,HIGH);
digitalWrite(in2,LOW);
digitalWrite(enB,LOW);// para el motor B que utioizaremos más adelante
digitalWrite(in3,HIGH);
digitalWrite(in4,LOW);
}
void loop()
{
joyposVert=analogRead (joyVert);
joyposHorz=analogRead (joyHorz); // leer las posiciones del joystick
//determina si son movimiento adelante o atrás
//hace esto leyendo el valor del vertice
//aplica el resultado para velocidaes del motor y las direción.
if (joyposVert < 460)
{
//condicione para ir hacia atrás
digitalWrite (in1,LOW); //para el motor A
digitalWrite (in2,HIGH);
digitalWrite (in3,LOW); // para el motor B
digitalWrite (in4,HIGH);
//invertir la lectura
joyposVert = joyposVert - 460; //produce numeros negativos
joyposVert = joyposVert * - 1; // produce numeros positivos
MotorSpeed1=map(joyposVert,0,460,0,255);
MotorSpeed2=map(joyposVert,0,460,0,255);
}
else if (joyposVert > 564)
{
digitalWrite (in1,HIGH);//para el motorA
digitalWrite (in2,LOW);
digitalWrite (in3,HIGH);//para el motor B
digitalWrite (in4,LOW);
MotorSpeed1= map(joyposVert,564,1023,0,255);
MotorSpeed2= map(joyposVert,564,1023,0,255);
}
else
{
MotorSpeed1=0;
MotorSpeed2=0;
}
if (joyposHorz<460)
{
//moviemiento a la izquierda
joyposHorz = joyposHorz - 460;//el producto en negativo de los numeros
joyposHorz = joyposHorz * -1; // el numero es positivo
////mapea con valor maximo de 255
joyposHorz= map (joyposHorz,0,460,0,255);
MotorSpeed1=MotorSpeed1 - joyposHorz;
MotorSpeed2=MotorSpeed2 + joyposHorz;
//no exceder el radio de 0-255 para la velocidad de motor
if (MotorSpeed1<0)MotorSpeed1=0;
if (MotorSpeed2>255)MotorSpeed2=255;
}
else if (joyposHorz > 564)
{
//mover a la derecha
joyposHorz= map (joyposHorz,564,1023,0,255);
MotorSpeed1=MotorSpeed1 + joyposHorz;
MotorSpeed2=MotorSpeed2 - joyposHorz;
if (MotorSpeed1>255)MotorSpeed1=255;
if (MotorSpeed2<0)MotorSpeed2=0;
}
//ajustar la ¨buzzin¨ a mucha velocidad
if (MotorSpeed1 > 255)MotorSpeed1 = 255;
if (MotorSpeed2 < 0)MotorSpeed2 = 0;
if (MotorSpeed1 < 8)MotorSpeed1 = 0;
if (MotorSpeed2 < 8)MotorSpeed2 = 0;
//Set el motor velocidad
analogWrite (enA, MotorSpeed1);
analogWrite (enB, MotorSpeed2);
}