Hola a todos.
Lo primero debo de agradecer la ayuda que ya me ha dado esta pagina .
Estoy haciendo un proyecto para controlar una maquina, que posee un lcd, un teclado y un motor paso a paso que moverá una plancha de metal.
El movimiento de la plancha sera muy preciso y se moverá en décimas de mm.
Como el rango a mover es muy grande y la precisión muy pequeña, me encuentro que debo de pulsar muchísimas veces el botón para desplazarme por ejemplo 15 cm.
Me gustaría programarlo de manera que manteniendo la tecla pulsada, se fuera incrementando la distancia, sin tener que estar pulsando repetidamente.
Este es el código que tengo de momento:
while(incorrecto)
{
deteccion = leerDetectores();// Esta función permite leer el estado de sensores de final de carrera
opcion = kpd.getKey(); //Opción es de tipo Char
switch (opcion)
{
case '7':
if(!bitRead(deteccion, 3) && !bitRead(deteccion, 4))
{
//Acercar sensor //ajustar para numeros mayores que diez
if(decenas ==0 && unidades==0)
{break;
}
else
{
unidades--;
if(unidades==-1)
{
unidades=9;
decenas--;
}
//Actualizar distancia de trimado
lcd.setCursor(11,3);
lcd.print(decenas);
lcd.print(unidades);
lcd.print(".");
lcd.print(decimas);
//Mover el motor
AvanzaMotorA(0,10);
}
}
break;
case '8':
if(!bitRead(deteccion, 3) && !bitRead(deteccion, 4))
{
//Acercar sensor
decimas--; //ajustarlo tambien
if(decimas==-1)
{
decimas=9;
unidades--;
}
if(unidades==-1)
{
unidades=9;
decenas--;
}
//Actualizar distancia de trimado
lcd.setCursor(11,3);
lcd.print(decenas);
lcd.print(unidades);
lcd.print(".");
lcd.print(decimas);
//Mover el motor
AvanzaMotorA(0,1);
}
break;
case'9':
//Alejar sensor
if(!bitRead(deteccion, 7))
{
decimas++;
if(decimas==10)
{
decimas=0;
unidades++;
}
if(unidades==10)
{
unidades=0;
decenas++;
}
//Actualizar distancia de trimado
lcd.setCursor(11,3);
lcd.print(decenas);
lcd.print(unidades);
lcd.print(".");
lcd.print(decimas);
//Mover motor
AvanzaMotorA(1,1);
}
break;
case'C':
//Alejar sensor
if(!bitRead(deteccion, 7))
{
unidades++;
if(unidades==10)
{
unidades=0;
decenas++;
}
//Actualizar distancia de trimado
lcd.setCursor(11,3);
lcd.print(decenas);
lcd.print(unidades);
lcd.print(".");
lcd.print(decimas);
//Mover motor
AvanzaMotorA(1,10);
}
break;
}//switch
}//if
De momento como he dicho solo consigo que se incremente la distancia pero pulsando repetidamente las teclas...
Ahh para ir un poco más rápido he puesto dos teclas en cada dirección para en una mover 0.1mm y en la otra 1 mm.
Gracias