Paso 3: Hacer dos cosas a la vez!
La siguiente cosa a hacer código es jam juntos los controles de motor de la C.C. y motor paso a paso para que puedas controlar ambos a la vez.
Si nos fijamos en el código en los pasos anterior verás que utilicé diferentes pins y nombres de variables para cada conjunto de código de prueba. Esto nos permite los jam juntos sin mucha modificación.
He leído que hay mucho mejores formas de combinar bloques de código, pero todavía estoy aprendiendo, así que todo lo que he hecho es cortar y pasado los dos programas juntos.
He aumento los valores de anaolog que se utilizan como la posición de 'centro' de la palanca de mando. Esto ayuda a evitar que accidentalmente con el motor mal.
Este último tenemos que empalmar en otro lote de código para controlar el motor para abrir y cerrar la pinza!
Aquí está el código de Arduino para controlar un motor paso a paso y un motor de corriente continua (DC etiquetado motor A, ya que estaremos agregando B este ultimo)
/////////////////////// ARDUINO CODE //////////////////////////
joystickj con 2 potes para controlar un paso a paso y dirección y velocidad del motor DC *** / /
declarar pines para paso a paso
int potPin_X = 1;
int Step_X = 13;
int Dir_X = 12;
int Enable_X = 8;
declarar valores de paso a paso
int Speed_X = 0; velocidad de paso (demora entre los pasos)
int val_X = 0;
int h = 0;
declarar los pernos para el motor DC A
int potPin_A = 2; Seleccione la entrada de pin para el potenciómetro
int val_A = 0; variable para almacenar el valor que viene desde el sensor
Declarar variables de DC A
int j = 0;
int Dir_A = 4;
int Speed_A = 5;
void setup() {}
configuración de pines de paso a paso
pinMode (Step_X, salida);
pinMode (Dir_X, salida);
pinMode (Enable_X, salida);
pines de configuración CC motor A
pinMode (Dir_A, salida);
pinMode (Speed_A, salida);
Serial.Begin(9600); Observe que eso comm serial se puede utilizar para depurar
Pero reducir el código y ralentizar mucho el motor paso a paso (y ser confuso para mí)
}
void loop() {}
LEA PASO A PASO Y CONTROL / / /
Lea la ubicación de la palanca de mando y calcular valores para motor paso a paso
val_X = analogRead(potPin_X); leer el valor del sensor
h = val_X - 517; ¿517 es centro - cuán lejos del centro?
h = abs(h); valor absoluto
Speed_X = 70000/h; Esta matemática invierte el valor y escala según se necesite
70000 valor encontrado mediante prueba y error
La demora entre los pasos determinará la velocidad del motor
/ Así, retardo hasta = velocidad abajo
controlar el motor paso a paso / /
Si (val_X > = 530) {}
digitalWrite(Enable_X,LOW); permiten
digitalWrite (Dir_X, alto); Sistema de dirección
digitalWrite(Step_X,HIGH);
delayMicroseconds(2);
digitalWrite(Step_X,LOW);
delayMicroseconds(Speed_X);
}
Si (val_X < = 500) {}
digitalWrite(Enable_X,LOW); / / habilitar
digitalWrite (Dir_X, bajo); Otra dirección
digitalWrite(Step_X,HIGH);
delayMicroseconds(2);
digitalWrite(Step_X,LOW);
delayMicroseconds(Speed_X);
}
Si (val_X < = 530 & & val_X > = 500) {}
digitalWrite(Enable_X,HIGH); desactivar el motor paso a paso si el joystic está en el centro
}
UN MOTOR DC - LEER Y CONTROLAR / / /
Lea la ubicación de la palanca de mando y calcular la distancia y del centro de
val_A = analogRead(potPin_A); leer el valor del sensor
j = val_A - 517; 517 es centro - cuán lejos del centro de
j = abs(j); valor absoluto
poner algunos límites en j para mantener valores PWM útil
por debajo de 100 no se mueva el motor y PWM máximo es 255
Si (j > = 510) {}
j = 510; lo más que puede hacer el pin PWM es de 255
}
Si (j < = 200 & & j > = 10) {}
j = 200; por debajo de 100 PWM el motor hace un pich alta sonido y no se mueve
}
Si (j < = 10) {}
j = 0; debajo de 10 el joystick es muy cercano al centro
}
Funcionamiento motor de DC A basado en las entradas analógicas de joystick
Si (val_A > = 530) {}
digitalWrite (Dir_A, alto); otra dirección
analogWrite (Speed_A, j/2); PWM salida (dividir por 2, ya que máximo es 255)
}
Si (val_A < = 500) {}
digitalWrite (Dir_A, LOW); //
analogWrite (Speed_A, j/2); //
}
Si (val_A < = 530 & & val_A > = 500) {}
analogWrite (Speed_A, 0); Apagar si el joystick está en el centro
}
imprimir valores para la depuración
Serial.Print(val_A); Enviar números de PC por lo que se puede ver lo que pasa
Serial.Print(",");
Serial.println(j);
}