Detectar la longitud de la pulsación de un botón usando un microcontrolador

0

Estoy interesado en crear un panel de botones de búsqueda (2 botones - atrás y adelante) que se conectará con el reproductor de música nativo de mi Android, similar al reproductor de CD de mi auto.

Me gustaría que los botones tengan operaciones dobles:

  1. Busca hacia atrás / adelante en la duración de una pista específica
  2. Busca hacia atrás / adelante entre pistas en una lista de reproducción

Estoy contemplando cómo funciona esto en mi auto, para poder construirlo por mi cuenta, está ahí:

Una tensión diferente que atraviesa el circuito cuando se presiona más el botón

o

¿Hay algún tipo de temporizador en el código del microcontrolador que le dice que envíe un orden diferente cuando el botón alcanza un cierto período de tiempo que se presiona?

Por favor, preste atención a las dos partes de mi pregunta: cómo funciona esto realmente, y cómo debo desarrollarlo por mi cuenta, preferiblemente utilizando Arduino, ya que tengo uno por ahí.

Siéntase libre de corregirme si estoy cometiendo errores de terminología. Soy más bien un tipo de persona, este hardware es nuevo para mí.

    
pregunta t0mgs

2 respuestas

1

Para amplificar el comentario de Ignacio

El ejemplo de Arduino muestra cómo usar el tiempo (en milisegundos desde que se enciende el chip AVR) para determinar cómo siempre se ha pulsado un botón (probablemente).

if ((millis() - lastDebounceTime) > debounceDelay) {
  ...
  if (buttonState == HIGH) {

El ejemplo hace esto porque los botones físicos generalmente rebotan hacia arriba y hacia abajo varias veces cuando los presionas, lo que puede leerse como múltiples pulsaciones de botones. Así que ignoras cualquier cosa que suceda más rápido de lo que la mayoría de los humanos pueden apuñalar sus dedos hacia arriba y hacia abajo.

Se puede utilizar la misma técnica para ver cuánto tiempo ha estado el botón en un estado "abajo". Es posible que deba refactorizar un poco la lógica en el software de ejemplo.

    
respondido por el RedGrittyBrick
1

Ciertamente NO se aplica un voltaje diferente al botón cuando se presiona el botón por más tiempo. El firmware usa un temporizador para determinar cuánto tiempo se presionó el botón y qué operación realizar.

Aquí es cómo puedes hacerlo. Cuando se presiona (y se abona) el botón, se inicia un temporizador que caducará en 250 milisegundos aproximadamente. Si se suelta el botón (y se abona) antes de que expire el temporizador, cancele el temporizador y realice la operación "siguiente pista". Si el temporizador expira (es decir, el botón aún está presionado), realice la operación de "avance rápido". Continúe avanzando rápidamente hasta que se suelte el botón. (Podría reconfigurar el temporizador para que caduque repetidamente cada 50 milisegundos, aproximadamente, en cuyo momento repetiría o cancelaría la operación de avance rápido). Una vez que lo haga funcionar, ajuste los periodos del temporizador según sus preferencias.

    
respondido por el kkrambo

Lea otras preguntas en las etiquetas