Hola, estoy programando con Arduino UNO un joystick que controle un servo motor y un motor paso a paso, tenia la idea de hacer que el joystick cambie entre un motor y otro al presionar el botón que incluye, pero no se como, acabo de comenzar a trabajar con esto y espero poder recibir su ayuda.
Tienes algún código ya hecho o estas en ceros? también si puedes añadir alguna imagen del joystick que estan usando para ver como funciona serviría, empecemos por eso vale?
Tengo esto, lo encontré en internet, y el joystick es un keyes.
#include <Servo.h>
Servo servo1;
int angulo = 90 ;
int salto = 3 ;
int Eje_X = A1 ;
int Eje_Y = A2 ;
int boton = 4;void setup()
{
servo1.attach(9) ;
pinMode( boton, INPUT_PULLUP) ;
}
void loop()
{
int p = analogRead(A1);
if ( p < 400 )
angulo = angulo - 3 ;
else if (p>600)
angulo = angulo + 3 ;servo1.write(angulo);
delay (50);
}
Primero, hee si el joystick tienen eje X y eje Y, porque no mover el motor con un eje y el paso a paso con el otro
Pero de la manera en que plantes la cosas se podria con algo asi....
const int ejeX1 = A0; // Eje X1
const int ejeY1 = A1; // Eje Y1
const int botJ1 = 8; // Bot 1
int temp = 0; // Motor o paso ?
void setup ()
{
pinMode(ejeX1,INPUT); //Lee joistik X
pinMode(ejeY1,INPUT); //Lee joistik Y
pinMode(botJ1,INPUT); //Boton jotick
}
void loop ()
{
if (digitalRead(botJ1) == HIGH)
{
if (temp ==0)
{temp = 1;}
else
{temp=0;}
}
if (temp ==0) // el motor manda
{
}
else // el paso a paso manda
{
}
}
Nomada:
Primero, hee si el joystick tienen eje X y eje Y, porque no mover el motor con un eje y el paso a paso con el otroPero de la manera en que plantes la cosas se podria con algo asi....
const int ejeX1 = A0; // Eje X1
const int ejeY1 = A1; // Eje Y1
const int botJ1 = 8; // Bot 1int temp = 0; // Motor o paso ?
void setup ()
{
pinMode(ejeX1,INPUT); //Lee joistik X
pinMode(ejeY1,INPUT); //Lee joistik Y
pinMode(botJ1,INPUT); //Boton jotick
}void loop ()
{
if (digitalRead(botJ1) == HIGH)
{
if (temp ==0)
{temp = 1;}
else
{temp=0;}
}
if (temp ==0) // el motor manda
{}
else // el paso a paso manda
{}
}
A que se refiere con
"int temp = 0; // Motor o paso ?"
Importante: No estás dando mucha información de lo que tienes(Nuevamente) ya que dices que el código que colocaste anteriormente lo sacaste de internet, esto me hace pensar que en realidad no has hecho nada, digo esto porque no me dices de que tipo es tu servo y tampoco mencionas que tipo de motor PAP estas usando, es vital aclarar esto porque de no hacerlo podrías quemar tu arduino así que lo mejor sería que nos dijeras.
Aún así en mi opinión yo lo haría algo así:
#include <Servo.h>
Servo myservo;
int posicion; // Variable de la posición del servo
const int ejeX = A0; // Eje X1
const int ejeY = A1; // Eje Y1 // Aclaro tu puedes ponerlo en el pin analógico que tu desees
const int boton1 = 5; // Botón 1
/* En cuanto al motor PAP como no me dices de que tipo es el código que dejo acá es para un Motor a Pasos Unipolar de 5 o 6 hilos haciendo esto tienes que usar un integrado UNL2003 esto para incrementar el voltaje que se le suministra al motor. Si necesitas más info. puedes revisar su respectiva datasheet.
Control de MOTOR a Pasos en Secuencia Normal (2 bobinas activadas por cada paso) para 4 estaciones*/
int motorPin1 = 8; // Pines del Motor
int motorPin2 = 9;
int motorPin3 = 10;
int motorPin4 = 11;
int delayTime = 1000; // DelayTime determina la espera entre uno y otro paso
int delayTime1 = 100; // DelayTime1 determina la velocidad de giro entre uno y otro paso
int count = 0;
Nota que yo considero importante
[quote] Pin SW del Joystick
El Joystick cuenta con la opción de un botón selector asignado al pin SW, la salida de este puerto esta controlado por un push-button, por lo que hay que configurarlo en modo PULL-UP. Para esto tendremos que agregar una resistencia de 10K conectado al puerto SW [/quote]
void setup(){
pinMode(ejeX,INPUT); //Lee joystick X
pinMode(ejeY,INPUT); //Lee joystick Y
pinMode(boton1,INPUT); //Botón joystick
myservo.attach(2); // Selecionamos el pin 2 como el pin de control para el servo
pinMode(motorPin1, OUTPUT); // Configuración de los Pines como salida digital del PAP
pinMode(motorPin2, OUTPUT);
pinMode(motorPin3, OUTPUT);
pinMode(motorPin4, OUTPUT);
}
void loop()
{
ejeX = analogRead(A0); //leemos el puerto analógico A0 y lo cargamos a ejex
ejeY = analogRead(A1); //Lo mismo para el ejey
for (pos = 0; pos <= 180; pos += 1) { // mueve al servo desde los 0° hasta los 180°
myservo.write(pos); // escribe los valores en el servo
delay(15); // waits 15ms for the servo to reach the position
}
for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
for (count = 0; count < 3; count++) // Aqui en el for es donde se manipulan los grados que se desean asignar al motor
{
// Los pines se activan en secuencia de las manecillas del reloj
// Punto A (Primero)
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, HIGH);
delay(delayTime1); // Un micro segundo de espera
// Punto B (Segundo)
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
delay(delayTime1);
// Punto C (Tercero)
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin4, LOW);
delay(delayTime1);
// Punto D (Cuarto)
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin4, HIGH);
delay(delayTime1);
}
delay(1000);
}
Bueno todo lo anterior es para que veas como se manejan tanto el servo como el PAP ahora a ti te queda la tarea de como cambiar que motor se activa o desactiva con el botón de tu joystick es solo cuestión de investigar un rato en la red. Suerte
"int temp = 0; // Motor o paso ?"
Una variable que guarda si el Joystick controla el motor o el paso a paso, por eso lo de "Motor o paso ?"
haber chicos tengo un pequeñin problema tengo un programa el cual controlo unos servomotores con joysticks me va pero el joystick no responde si giro hacia un lado o hacia otro solo reacciona a uno y quiero que me funcione a los dos lados y tambien wdws
haber tengo un problema tengo un programa el cual esta constituido por dos joysticks y dos servomotores de rotacion continua
y lo que pasa esque solo vale un joystick y un servo pero el otro joystick y el otro servomotor no va y quiero que cuando pulse el boton del joystick pare el servomotor y gire a la derecha tanto a la izquierda porque solo me gira a la derecha y no para el programa es:
#include <Servo.h>
Servo myServo;
Servo Myservo;
void setup(){
myServo.attach(9);
myServo.attach(10);
Serial.begin(9600);
}
void loop(){
int x= analogRead(A0);
int y= analogRead(A1);
int mapx=map(x,0,1023,1,-1);
int mapy=map(y,0,1023,1,-1);
myServo.write(x);
myServo.write(y);
int a= analogRead(A2);
int s= analogRead(A3);
int mapa=map(a,0,1023,1,-1);
int maps=map(s,0,1023,1,-1);
Myservo.write(a);
Myservo.write(s);
delay(250);
}
...
La última fecha de este post es de hace dos años: 04-10-2015
Más allá de las normas del foro, la lógica dice que esto es un absurdo, especialmente cuando al escribir te ha salido un warning en rojo advirtiendo que es un post antiguo. Encima lo haces dos veces.
Denle un respiro a los moderadores que en este foro nadie cumple, no hay ganas de ayudar así. ¿Tan difícil es abrir un hilo nuevo?
Postdata: ¡Por favor la ortografía! HABER != A VER.