/*Con este programa vamos a mover el tope de corte de la escuadradora, * teniendo en cuenta una distancia máxima una mínima e introducirle el valor por pantalla * y un ajuste fino mediante botones de avance o retroceso de 0.5 y 1 mm */ #include "Nextion.h" //incluir libreria nexion //VARIABLES EJE X int pinActivacionBobinasMotor = 2; //PIN ACTIVACION BOBINA EJE X(PUL) int pinSentidoGiroMotor = 5; //PIN ACTIVACION SENTIDO GIRO EJE X(DIR) int pinActivacionDriverMotor = 8; //PIN HABILITAR DRIVERS MOTORES int pinFinalDeCarrera = 9; //PIN FINAL DE CARRERA EJE X boolean Homing_Hecho = false; //HOMING EJE X HECHO float ConversionPasos = 0; //VARIABLE PARA CONVERTIR MILIMETROS A PASOS float Distancia_Maxima_X = 1700; //DISTANCIA MAXIMA DE RECORRIDO EJE X float Posicion_Eje_X = Distancia_Maxima_X; //VARIABLE PARA POSICIONAR EL EJE X AL HACER HOMING float Distancia_Minima_X = 100; //DISTANCIA MINIMA OFFSET PARA EJE X EN MILIMETROS char ejeX = "X"; int PasosPorMilimetro = 2560; unsigned long VelocidadGiroMotor = 10; //variación de la velocidad de giro //VARIABLES EJE Y int pinActivacionBobinasMotor_Y = 3; //PIN ACTIVACION BOBINA EJE Y(PUL) int pinSentidoGiroMotor_Y = 6; //PIN ACTIVACION SENTIDO GIRO EJE Y(DIR) int pinFinalDeCarrera_Y = 10; //PIN FINAL DE CARRERA EJE Y boolean Homing_Hecho_Y = false; //HOMING EJE Y HECHO float ConversionPasos_Y = 0; //VARIABLE PARA CONVERTIR MILIMETROS A PASOS float Distancia_Maxima_Y = 1700; //DISTANCIA MAXIMA DE RECORRIDO EJE Y float Posicion_Eje_Y = Distancia_Maxima_Y; //VARIABLE PARA POSICIONAR EL EJE Y AL HACER HOMING float Distancia_Minima_Y = 100; //DISTANCIA MINIMA OFFSET PARA EJE Y EN MILIMETROS char ejeY = "Y"; int PasosPorMilimetro_Y = 2560; //PASOS POR MILIMETRO MOTOR EJE Y unsigned long VelocidadGiroMotor_Y = 10; //VELOCIDAD GIRO MOTOR EJE Y /* RELACION DE VARIABLES CON LOS BOTONES DE PANTALLA NEXTION */ NexButton botRetro05X = NexButton(1,5,"botRetro05X"); //parámetros de identifiacion de los botones en la pantalla nexion NexButton botAv05X = NexButton(1,6,"botAv05X"); NexButton botRetro1X = NexButton(1,7,"botRetro1X"); NexButton botAv1X = NexButton(1,8,"botAv1X"); NexButton botHomingX = NexButton(1,9,"botHomingX"); NexButton botonAtras = NexButton(1,1,"botonAtras"); NexButton botonEnviarX = NexButton(1,4,"botonEnviarX"); NexText introDistX = NexText(1,3,"introDistX"); NexText muestraDistX = NexText(1,2,"muestraDistX"); NexTouch *nex_listen_list[]= //cargar lista de botones y leer los cambios en los botones { &botRetro05X, &botAv05X, &botRetro1X, &botAv1X, &botHomingX, &botonAtras, &botonEnviarX, &introDistX, NULL }; /*declaracion de funciones */ void mostrarDistancia(float parDistancia) //funcion para mostrar la distancia por pantalla como variable texto { char bufer[10]={0}; //Cadena donde almacenaremos el número convertido muestraDistX.setText(dtostrf(parDistancia, 6, 1, bufer)); } void introducirDistancia() //funcion para introducir la medida en mm por pantalla y valorar para saber en que sentido tiene que girar el motor { if(Homing_Hecho==true) { char bufer[10]={0}; //Cadena donde almacenaremos el número convertido introDistX.getText(bufer,sizeof(bufer)); //pasamos el texto y lo dimensionamos float distanciaIntroducida = atof(bufer); //pasamos a float la variable char bufer if((distanciaIntroducida < Posicion_Eje_X) && (distanciaIntroducida > Distancia_Minima_X)) //si la distancia introducida es menor a la posicion del eje x y es mayor que 100 { float diferenciaEntreDistanciaIntroducidayPosicionEjeX = Posicion_Eje_X - distanciaIntroducida; //hacemos la diferencia en float entre la distanciaIntroducida y la posicion del eje X diferenciaEntreDistanciaIntroducidayPosicionEjeX = diferenciaEntreDistanciaIntroducidayPosicionEjeX *(-1); //multiplicamos por -1 para volverla negativa para mover el motor hacia el punto de inicio Mover_Eje(ejeX,diferenciaEntreDistanciaIntroducidayPosicionEjeX); //enviamos a la funcion mover eje el parametro obtenido de la diferencia //MuestraDist.setText(dtostrf(distanciaIntroducida, 6, 1, bufer)); //mostramos en pantalla la distancia introducida que coincide con la posicion del eje X una vez llevado el motor a esa posicion mostrarDistancia(distanciaIntroducida); } else if((distanciaIntroducida > Posicion_Eje_X) && (distanciaIntroducida < Distancia_Maxima_X)) //si la distancia introducida es mayor a la posicion del eje x y menor a la distancia maxima (1700) { float diferenciaEntreDistanciaIntroducidayPosicionEjeX = distanciaIntroducida - Posicion_Eje_X; //hacemos la diferencia en float entre la distanciaIntroducida y la posicion del eje X Mover_Eje(ejeX,diferenciaEntreDistanciaIntroducidayPosicionEjeX); //enviamos a la funcion mover eje el parametro obtenido de la diferencia //MuestraDist.setText(dtostrf(distanciaIntroducida, 6, 1, bufer)); //mostramos en pantalla la distancia introducida que coincide con la posicion del eje X una vez llevado el motor a esa posicion mostrarDistancia(distanciaIntroducida); } else if((distanciaIntroducida < Distancia_Minima_X) || (distanciaIntroducida > Distancia_Maxima_X) || (distanciaIntroducida == Posicion_Eje_X)) //si la distancia introducida esta fuera de rango es menor a 100 o mayor a 1700 es invalida por lo tanto solo mostramos en pantalla la posicion del eje X { mostrarDistancia(Posicion_Eje_X); //MuestraDist.setText(dtostrf(Posicion_Eje_X, 6, 1, bufer)); } } } void sentidoMotorHaciaElCero() //funcion para definir el sentido de giro del motor para mover el tope hacia el cero { digitalWrite(pinSentidoGiroMotor,LOW); } void sentidoMotorHaciaDistanciaMaxima() //funcion para definir el sentido de giro del motor para mover el tope hacia la distancia máxima { digitalWrite(pinSentidoGiroMotor,HIGH); } void BotonHaciaMaximo1() //funcion para mover el tope hacia la distancia máxima 1mm con cada pulsacion del boton { if(Homing_Hecho==true) { Mover_Eje(ejeX,1); //pasamos a la funcion mover_eje dos parametros eje x y -1 } } void BotonHaciaMinimo1() //funcion para mover el tope hacia el punto 0 1mm con cada pulsacion del boton { if(Homing_Hecho==true) { Mover_Eje(ejeX,-1); //pasamos a la funcion mover_eje dos parametros eje x y 1 } } void BotonHaciaMaximo05() //funcion para mover el tope hacia la distancia máxima 0.5mm con cada pulsacion del boton { if(Homing_Hecho==true) { Mover_Eje(ejeX,0.5); //pasamos a la funcion mover_eje dos parametros eje x y -0.5 } } void BotonHaciaMinimo05() //funcion para mover el tope hacia el punto 0 0.5mm con cada pulsacion del boton { if(Homing_Hecho==true) { Mover_Eje(ejeX,-0.5); //pasamos a la funcion mover_eje dos parametros eje x y 0.5 } } void Mover_Eje(char Parametro_Eje,float Distancia) //funcion para mover el eje y valorar la distancia para saber cuanto se tiene que mover y en que sentido { if((Parametro_Eje == ejeX) && ((Posicion_Eje_X + Distancia) <= Distancia_Maxima_X) && ((Posicion_Eje_X + Distancia) >= Distancia_Minima_X)) //valoramos que estemos en el ejeX y que nunca se supere la distancia maxima y siempre la distancia sea mayor o igual a 100mm es lo maximo que permite acercar el tope { if(Distancia < 0) //si le pasamos una distancia negativa { sentidoMotorHaciaElCero(); Posicion_Eje_X = Posicion_Eje_X + Distancia; Distancia=Distancia*(-1); //pasamos la distancia a postiiva para el bucle del for hacerlo en valor absoluto Mover_Motor(Distancia); } else if(Distancia > 0) { sentidoMotorHaciaDistanciaMaxima(); Posicion_Eje_X = Posicion_Eje_X + Distancia; Mover_Motor(Distancia); } } mostrarDistancia(Posicion_Eje_X); } void Mover_Motor(float Distancia) //funcion que convierte los milimetros de la distancia en los pasos que tiene que dar el motor para recorrer esa distancia { ConversionPasos=Distancia*PasosPorMilimetro; for(float x=0;x