Buenos días. Soy nuevo en este foro así que primero que nada pido disculpas si no he abierto el tema donde tocaba o si no he puesto el código como debía. Por favor, hacedmelo saber y si hace falta lo cambio.
El caso es que en una asignatura estoy empezando con el Arduino y voy un poco perdido puesto que yo de programación hice un semestre con lo básico de C y nada más.
Tengo que hacer que un motor paso a paso bipolar se mueva en un sentido, en el otro o que vuelva a la posición inicial. Sin embargo con el código que he puesto no me sale exactamente lo que "debería".
Lo que debería/quiero que haga: El programa pregunta (a traves de la pantalla del ordenador) si quieres que el motor se mueva hacia la izquierda, hacia la derecha o que vuelva a la posición inicial. Una vez ha preguntado esto pregunta el número de pasos (si se selecciona la opción de girar, si se selecciona la opción de volver lo hace automáticamente)
Lo que hace: Pregunta de manera constante llenando la pantalla con la primera pregunta. En caso de que se ponga un número (0, 1 o 2) aparece la frase indicada pero vuelve a empezar el bucle y vuelve a preguntar la primera frase.
No sé si me he explicado bien, he intentado comentar el código lo máximo posible para que sea sencillo de entender. Cualquier cosa que no se entienda preguntadmela e intentaré explicarla mejor.
Un saludo.
#include <Stepper.h> // importamos la libreria de paso a paso
#define STEPS 200// definimos el número de pasos por vuelta
//Nombramos el motor, el numeor de paso y pins de control
Stepper stepper(STEPS,8,9,10,11);// Numero de pasos por vuelta y pns de control
int num; //numero de pasos
int direccion; //dirección de giro
int vel=60; //velocidad de giro en RPM
int en = 7; //declaracion del pin digital Enable que habilita el funcionamiento del circuito
int cont;
void setup() {
// put your setup code here, to run once:
Serial.begin (9600);
pinMode (en, OUTPUT);
digitalWrite(en, HIGH);// escritura de un "1" fijo en el pin en
stepper.setSpeed(vel);//fija la velocidad de gio;
}
void loop() {
Serial.println ("izquierda(1)/derecha(2)/origen (0)");//selección del sentido de giro o si se quiere volver al orígen
if(Serial.available()){//hay algo q leer del puerto serie
direccion=Serial.read();//guarda en direccion lo que lee del puerto serie direccion=Serial.read()
Serial.println("número de pasos");// selección del numero de pasos
if(Serial.available()){// Si hay algo que leer
num=Serial.read();//guarda en direccion lo que lee del puerto serie num=Serial.read()
if(Serial.available()){// si puede leer del puerto serio
if( direccion==1){
{for(int i = 0; i >=num; i++)
{stepper.step(1);//dará un paso cada vez hasta que llegue al numero de pasos
delay(1);
cont++// suma una cifra al contador;
}
}
}
else if(direccion==2){
{for(int i = 0; i >=num; i++)
{stepper.step(-1);
cont--;}}}
else if(direccion==0){
if(cont>0){// si el contador es mayor que cero deberá ir al otro lado
for(int a=cont;a>0;a--)
{stepper.step(-1);}// da un paso en sentido contrario}
if(cont<0){
cont=cont*-1;
for(int a=cont;a>0;a--)
{stepper.step(-1);}}
}
else{
Serial.println("Error! Dirección equivocada.");// si no se selecciona ninguno de los anteriores aparece el error}
}
}
}
}