Marcación continuada con boton

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 :slight_smile:

te adjunto un sketch que uso para programar un riego automático. para leer las pulsaciones uso una lectura por interrupción de cada "x" mseg veo si la tecla está pulsada y si es la misma que la anterior.
la primera condición que exigo para tomarla como válida es que esté presionada "n" bucles. Luego, si sigue la misma presionada, la sigo tomando como válida.
Jugando con estos parámetros conseguirás la velocida que quieras para la primera pulsación y para las repeticiones.
va más código que no necesitas, lo tiras y punto.

Riego_LCD.zip (3.12 KB)

Muchas gracias!!
Siento no haber respondido antes, pero ando un poco liado. Ahora mismo le hecho un vistazo :wink: y te comento