Autor Tema: un pulsador para dos acciones (pulsacion corta/larga)  (Leído 8746 veces)

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

Desconectado josebaorza

  • PIC10
  • *
  • Mensajes: 6
un pulsador para dos acciones (pulsacion corta/larga)
« en: 25 de Enero de 2010, 11:08:01 »
buenas tardes amigos. Estoy haciendo un proyecto en el que el pic16f876 tiene 2 pulsadores.Hasta ahora funciona bien... pero necesito que por ejemplo el pulsador 1(pin_b7) cuando pulsamos mas de 3 segundos se encienda, quiero decir que modo sea igual a 1, y que cuando vuelvo a pulsar 3 seg pase a modo 0, y que cuendo pulso solo una vez aumente el modo.

codigo:
void botones(void)
{
//port_b=0;
set_tris_b(0b11000000); //configuramos el puerto

//while(1)
//{
if(!input(pin_b7))
  {
  if(modo>=5)
      {
      modo=1;
      }else
  modo++;
  delay_ms(50);
  //printf(" %d ",modo);
}
if(!input(pin_b6))
  {
  if(poten>=255)
      {
      poten=20;
      }else
  poten=poten+20;
  delay_ms(50);
  //printf(" %d ",modo);
}
printf(" %d , %d  ",modo,poten);
//}
}

muchas gracias por la ayuda

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: un pulsador para dos acciones (pulsacion corta/larga)
« Respuesta #1 en: 25 de Enero de 2010, 20:28:00 »
Se me ocurre que puedes utilizar un timer para realizar el conteo de los 3segundos necesarios, tienen que haber seguramente varias banderas por ahí para poder hacer y no hacer ciertas cosas antes que pasen los 3 seg y después que pasen.

Una vez que pasen los 3seg con el time, por interrupción seguramente debes volver a preguntar por el estado del pulsador para saber si se mantuvo presionado y cambiar tus banderas y controlar lo que se debe y no hacer también.

Espero te sirva la idea, saludos.
.

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: un pulsador para dos acciones (pulsacion corta/larga)
« Respuesta #2 en: 25 de Enero de 2010, 20:49:41 »
Hola jose, segun como programas io haria un bucle while que se ejecute siempre que la tecla este pulsada, alli dentro suma pausas de 5ms por ejemplo, si las pausas llegan a 3 seg ejecutas un codigo, sino cambias de modo.

saludos.
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: un pulsador para dos acciones (pulsacion corta/larga)
« Respuesta #3 en: 25 de Enero de 2010, 21:50:48 »
si muy inteligente, ahora que me doy cuenta, buena idea Kallitos :mrgreen:

puedes sumar pausas de la misma cantidad del antirrebote y contar así hasta los 3seg, y ahí va sin interrupción y sin muchas banderas.

saludos.
.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: un pulsador para dos acciones (pulsacion corta/larga)
« Respuesta #4 en: 26 de Enero de 2010, 00:57:24 »
Hacer esperar al micro durante 3 segundos por una potencial pulsación? mmm.. Es difícil que el micro esté dispuesto a esperar tanto, salvo que no realice ninguna tarea importante. En el caso de que no pueda esperar ese tiempo necesitas usar un timer como dice Cryn, configuradolo para que interrumpa cada 20ms así evitas el efecto rebote y podes detectar una pulsación. Con 2 banderas y un contador creo que podrías resolver el problema.

Eso sí, hay que fijar algunos parámetros, como por ejemplo una pulsación corta es aceptada cuando esta dentro de los 300ms a 1s, y larga mayor o igual a 3s.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: un pulsador para dos acciones (pulsacion corta/larga)
« Respuesta #5 en: 26 de Enero de 2010, 01:19:03 »
Yo hice una libreria, algo compleja, que permite la detección de 7 posibles "combinaciones" usando solamente 2 pulsadores.

Cuatro de ellas son las que necesitás.

Actualmente lo uso y funciona perfecto el algoritmo. Me falta optimizarlo porque lo hice algo corto de tiempo y mientras lo hice se me ocurrieron mejores ideas.

Si queres lo comparto. Tengo que limpiarlo un poco nomás.

Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado josebaorza

  • PIC10
  • *
  • Mensajes: 6
Re: un pulsador para dos acciones (pulsacion corta/larga)
« Respuesta #6 en: 26 de Enero de 2010, 10:31:56 »
Gracias a todos por los consejos. :-/
Si puedes BrunoF pasame el codigo para hecharle un vistazo ya que estoy un poco perdido.....
un saludo

Desconectado kidpic

  • PIC16
  • ***
  • Mensajes: 231
Re: un pulsador para dos acciones (pulsacion corta/larga)
« Respuesta #7 en: 26 de Enero de 2010, 12:43:09 »
estaria bueno que lo compartas bruno, quiero hacer algo asi pero no se como empezar. con esa cantidad de opciones
gracias!!
Si quieres trascender..., enseña humildemente  lo que sabes.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: un pulsador para dos acciones (pulsacion corta/larga)
« Respuesta #8 en: 26 de Enero de 2010, 14:31:39 »
Ok. Adjunto el algoritmo con un ejemplo de uso y simulacion en Proteus.

Cada uno obviamente la puede usar como desee. El algoritmo que adjunto, esta pensado para ser usado cuando se requiere una gran cantidad de opciones asociadas a las teclas, caso como una aplicacion que posea menues y submenues. Si la aplicacion es mas sencilla, el algoritmo puede simplificarse y solo llamarse a la funcion keysCheck() y que solo devuelva un resultado en lugar de ejecutar una funcion. Si necesitan eso, diganme y lo modificamos.

Por otro lado, el algoritmo requiere que se lo llame periodicamente. En este caso elegi 25mS entre llamadas. Podria obviamente tambien usarse una interrupcion para que contabilice los tiempos en lugar de usar un delay como he hecho en este ejemplo.
Si cambian el tiempo entre llamdas, reajusten el valor de kSTEP_mS.

Tambien puede ser necesario que reajusten los valores:  ANTIREBOTE, LONGPRESS y LONGLONGPRESS si el error se hace muy grande. Recuerden que trabajan con enteros.

Listado de combinaciones:

Combinacion 1: Presionar A y soltarlo inmediatamente;
Combinacion 2: Presionar B y soltarlo inmediatamente;
Combinacion 3: Presionar A y mantenerlo mientra se presiona B y se lo suelta;
Combinacion 4: Presionar B y mantenerlo mientra se presiona A y se lo suelta;
Combinacion 5: Presionar y mantener A durante un periodo largo de tiempo;
Combinacion 6: Presionar y mantener B durante un periodo largo de tiempo;
Combinacion 7: Presionar A y B y mantenerlos durante un periodo muy largo de tiempo.

El algoritmo ha sido testeado y esta siendo utilizado en varios proyectos míos.
« Última modificación: 04 de Febrero de 2010, 05:36:35 por BrunoF »
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado josebaorza

  • PIC10
  • *
  • Mensajes: 6
Re: un pulsador para dos acciones (pulsacion corta/larga)
« Respuesta #9 en: 26 de Enero de 2010, 16:36:04 »
muchas gracias BrunoF, ya lo tengo descargado....  mañana te cuento que tal.
Muchas gracias y un saludo

Desconectado anfegori91

  • PIC12
  • **
  • Mensajes: 71
Re: un pulsador para dos acciones (pulsacion corta/larga)
« Respuesta #10 en: 02 de Febrero de 2010, 01:43:42 »
interesante el algoritmo... mientras lo observaba me surgió una idea de otro con 2 teclas:
una de las 2 teclas activa el conteo de pulsaciones de la otra y visceversa;
de acuerdo al número de pulsaciones se podría acceder a muchas opciones¡¡
 :mrgreen: :mrgreen:

A propósito, BrunoF, he ido a calculoalazar y me pareció interesante el generador de telarañas, pero el archivo no se puede descargar...
(iba a a descargar el de dev cpp) :(

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: un pulsador para dos acciones (pulsacion corta/larga)
« Respuesta #11 en: 03 de Febrero de 2010, 13:07:21 »
Hola anfegori. Efectivamente, 2 de las 7 funciones disponibles son de la manera que comentás.

Voy a ver si tengo alguna copia de seguridad del generador de telarañas y arreglo el link...

Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado manutek

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 555
Re: un pulsador para dos acciones (pulsacion corta/larga)
« Respuesta #12 en: 04 de Febrero de 2010, 01:23:30 »
Faa lindo laburo te mandaste brunoF,solo por curiosidad y si no es molestia, cuanto tiempo te llevo hacerlo al algoritmo?
Saludos manutek.
No es la conciencia del hombre la que determina su ser, sino, por el contrario, es su ser social el que determina su conciencia

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: un pulsador para dos acciones (pulsacion corta/larga)
« Respuesta #13 en: 04 de Febrero de 2010, 05:32:31 »
Hola manutek. ¿Te referis al algoritmo de los pulsadores o al de la telarañas?

El de los pulsadores: calculale hora y media planteandolo y unos 40 minutos escribiendo el código. Poco más de dos horas en total.
El de las telarañas me llevó casi 2 días...

Saludos!

« Última modificación: 04 de Febrero de 2010, 05:38:01 por BrunoF »
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: un pulsador para dos acciones (pulsacion corta/larga)
« Respuesta #14 en: 04 de Febrero de 2010, 05:35:47 »
Listado de combinaciones:

Combinacion 1: Presionar A y soltarlo inmediatamente;
Combinacion 2: Presionar B y soltarlo inmediatamente;
Combinacion 3: Presionar A y mantenerlo mientra se presiona B y se lo suelta;
Combinacion 4: Presionar B y mantenerlo mientra se presiona A y se lo suelta;
Combinacion 5: Presionar y mantener A durante un periodo largo de tiempo;
Combinacion 6: Presionar y mantener B durante un periodo largo de tiempo;
Combinacion 7: Presionar A y B y mantenerlos durante un periodo muy largo de tiempo.

P.D. Anexado al post correspondiente.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.