Compañeros del foro les presento mi duda, quiero controlar un motor a pasos con matricula 2BYJ-48 y un driver UL2003, logro que gire y todo, pero el problema es que cuando quiero ejecutar secuencias de pasos el motor se vuelve loco debido al programa, espero su asesoria.
les anexo el codigo de arduino que estoy usando:
int retardo=3; // Tiempo de retardo en milisegundos (Velocidad del Motor)
int dato_rx=60; // valor recibido en grados
int numero_pasos = 0; // Valor en grados donde se encuentra el motor
String leeCadena; // Almacena la cadena de datos recibida
void setup() {
Serial.begin(9600); // inicializamos el puerto serie a 9600 baudios
pinMode(11, OUTPUT); // Pin 11 conectar a IN4
pinMode(10, OUTPUT); // Pin 10 conectar a IN3
pinMode(9, OUTPUT); // Pin 9 conectar a IN2
pinMode(8, OUTPUT); // Pin 8 conectar a IN1
}
void loop(){
while (dato_rx>numero_pasos){ // Girohacia la izquierda en grados
paso_izq();
numero_pasos = numero_pasos + 1;
}
while (dato_rx<numero_pasos){ // Giro hacia la derecha en grados
paso_der();
numero_pasos = numero_pasos -1;
}
leeCadena = ""; // Inicializamos la cadena de caracteres recibidos
apagado(); // Apagado del Motor para que no se caliente
} ///////////////////// Fin del Loop ///////////////////////////
void paso_der(){ // Pasos a la derecha
digitalWrite(11, LOW);
digitalWrite(10, LOW);
digitalWrite(9, HIGH);
digitalWrite(8, HIGH);
delay(retardo);
digitalWrite(11, LOW);
digitalWrite(10, HIGH);
digitalWrite(9, HIGH);
digitalWrite(8, LOW);
delay(retardo);
digitalWrite(11, HIGH);
digitalWrite(10, HIGH);
digitalWrite(9, LOW);
digitalWrite(8, LOW);
delay(retardo);
digitalWrite(11, HIGH);
digitalWrite(10, LOW);
digitalWrite(9, LOW);
digitalWrite(8, HIGH);
delay(retardo);
}
void paso_izq() { // Pasos a la izquierda
digitalWrite(11, HIGH);
digitalWrite(10, HIGH);
digitalWrite(9, LOW);
digitalWrite(8, LOW);
delay(retardo);
digitalWrite(11, LOW);
digitalWrite(10, HIGH);
digitalWrite(9, HIGH);
digitalWrite(8, LOW);
delay(retardo);
digitalWrite(11, LOW);
digitalWrite(10, LOW);
digitalWrite(9, HIGH);
digitalWrite(8, HIGH);
delay(retardo);
digitalWrite(11, HIGH);
digitalWrite(10, LOW);
digitalWrite(9, LOW);
digitalWrite(8, HIGH);
delay(retardo);
}
void apagado() { // Apagado del Motor
digitalWrite(11, LOW);
digitalWrite(10, LOW);
digitalWrite(9, LOW);
digitalWrite(8, LOW);
}
Nota: pretendo lograr que el motor empiece en 0 grados y cuando ejecute el programa en arduino gire a +60 grados, despues pause y regrese a +20 grados, despues vaya a +40 grados y por ultimo regrese a 0 o su posicion inicial y se apague, esto con arduino mega 2560