Autor Tema: Deteccion Pulsasion Larga y corta?  (Leído 1212 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado elgarbe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2178
Deteccion Pulsasion Larga y corta?
« en: 04 de Febrero de 2015, 21:33:58 »
Hola, estoy necesitando alguna rutina para detectar pulsacion larga o corta en una entrada de un 4550. Una vez había visto algo bastante estandar en el foro, pero no puedo encontrarla!

Alguien tiene algo?

Saludos y gracias!
-
Leonardo Garberoglio

Desconectado elgarbe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2178
Re: Deteccion Pulsasion Larga y corta?
« Respuesta #1 en: 05 de Febrero de 2015, 10:38:09 »
Bueno, encontré el post, era este:

http://www.todopic.com.ar/foros/index.php?topic=29209.msg242309#msg242309

pero mientras estudio un poco el código de Bruno para ver si lo puedo implementar estuve jugando y escriví esto:

Código: [Seleccionar]
        if(BTN1==1){                    // Pulsador apretado
            if(fPrimerPulsacion==0){    //Primera vez que se detecta la pulsacion
                tiempo_pulsado[0]++;    // Inremento contador de 10mseg's
                fPrimerPulsacion = 1;   // Ya no será primera pulsacion
            }else{                      // Si no es primera pulsacion
                tiempo_pulsado[0]++;    // Inremento contador de 10mseg's
            }
        }else{                          // Si el pulsador no esta apretado
            if(fPrimerPulsacion==1){    // Pero estuvo apretado hace instantes
                if (tiempo_pulsado[0] < 3){     // Menos de 30mseg
                    tiempo_pulsado[0] = 0;      // Reseteo contador
                    modo[0] = 0;                // Fue rebote asíque modo=0
                    fPrimerPulsacion = 0;       // Borro flag
                }
                if (tiempo_pulsado[0] > 3 & tiempo_pulsado[0] < 100 ){
                    tiempo_pulsado[0] = 0;
                    modo[0] = 1;
                    fPrimerPulsacion = 0;       // Borro flag
                }
                if (tiempo_pulsado[0] > 100 && tiempo_pulsado[0] < 300 ){
                    tiempo_pulsado[0] = 0;
                    modo[0] = 2;
                    fPrimerPulsacion = 0;       // Borro flag
                }
                if (tiempo_pulsado[0] > 300){
                    tiempo_pulsado[0] = 0;
                    modo[0] = 0;
                    fPrimerPulsacion = 0;       // Borro flag
                }
            }
        }

eso va en la ISR de un timer configurado a 10mSeg.

En el main tengo:

Código: [Seleccionar]
        if(modo[0] == 1){
            i+=5;
            modo[0] = 0;
        }
        if(modo[0] == 2){
            i+=10;
            modo[0] = 0;
        }
        muestra_numero(i);

Hasta acá biene funcionando bien, ahora tengo que pasar algunas cosas a "#define" para hacerlo más configurable.

Saludos!
-
Leonardo Garberoglio

Desconectado parametro51

  • PIC10
  • *
  • Mensajes: 10
Re: Deteccion Pulsasion Larga y corta?
« Respuesta #2 en: 05 de Febrero de 2015, 15:00:13 »
Hola elgarbe yo uso uno muy bueno de esta pagina http://www.micropic.es/mpblog/2014/05/gestion-de-pulsadores/ tiene más funciones no solo la pulsación corta o larga y la verdad es que va de 10. Creo que algunos de los desarrolladores están por aquí asi que aprovecho para felicitarles por tan magnifico aporte.

Un saludo

Desconectado elgarbe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2178
Re: Deteccion Pulsasion Larga y corta?
« Respuesta #3 en: 05 de Febrero de 2015, 15:22:57 »
Excelente librería!!!!
y yo que ya le meti como 5 horas a mi programa... ahora no sé si seguir o implementar esa funcion.... voy a ver x q lo mío ya casi lo tengo funcionando.... me faltaba la autorrepeticion...

Gracias por el aporte, va a mis favoritos!
-
Leonardo Garberoglio