TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Medusa en 22 de Enero de 2010, 13:27:41

Título: Como se puede selecionar una opcion de un menu usando un solo selector?
Publicado por: Medusa en 22 de Enero de 2010, 13:27:41
Hola, estoy tratando de hacer un selector de menus usando un solo selector o pin de entrda en este cado el RA2, el modo de funcionamiento es el siguiente, si presiona una vez RA2 debe de ejecutarse la Option_0(), si presiono RA2 dos veces debe de ejecutarse Option_1() y asi sucesivamente, no puedo usar interrupciones.
Alguien me podria dar una sugerencia de como hacer esto?
Aqui dejo mi codigo aunque no sirve.. :5]

Código: [Seleccionar]
#define PULSADOR PIN_A2
int Modo;
.
.
.

while(1){

          if (!input(PULSADOR)){;
             Modo = 0;
             if (!input(PULSADOR)){;
                Modo = 1;
                if (!input(PULSADOR));
                    Modo = 2;
                 }
              }
           }
          if (Modo == 0)
              Option_0();
          if (Modo == 1)
              Option_1();
          if (Modo == 2)
             Option_2();
}
Título: Re: Como se puede selecionar una opcion de un menu usando un solo selector?
Publicado por: BrunoF en 22 de Enero de 2010, 13:45:02
Hola medusa.

Creo que es medio complicado hacerlo asi.

Si pensas detectar la cantidad de pulsaciones sobre un solo pulsador, tenes que lograr que el algoritmo contemple ciertas pautas y limites.

Por ejemplo, luego de la primer pulsacion ¿cuánto tiempo debe esperar a  una posible segunda, antes de considerar que la intención ha sido de pulsarlo sólo una vez? lo mísmo con una tercera pulsación.

Luego de cada pulsación, deberías esperar cierto tiempo a una posible próxima pulsación. Si no ocurre en dicho tiempo, considerás que el usuario quiso presionar el pulsador la cantidad de veces que llevás contados.

P.D. Te faltan algoritmos de antirebote ahi también.

¿Se entendió?


Título: Re: Como se puede selecionar una opcion de un menu usando un solo selector?
Publicado por: bigluis en 22 de Enero de 2010, 15:49:39
Puedes hacer que el microcontrolador pase por un retardo de cada 1ms 500 veces, si se han producido los 500 retardos entonces tomar la opcion, mientras no se hayan producido los 500 retardos entonces esperar opcion.

Código: [Seleccionar]
while(1){

          if (!input(PULSADOR)){;
            delay_ms(1);
            retardos++;
          else
            opcion++;
            delay_ms(50);
          if(retardos>=500)break;
}
switch(opcion){
case 1: ...
.
.

Si gustas puedes variar el tiempo del retardo y tambien puedes agregar algun codigo de antirrebote.
Título: Re: Como se puede selecionar una opcion de un menu usando un solo selector?
Publicado por: jfh900 en 22 de Enero de 2010, 16:16:57
Aparte de la implementación de los rebotes, yo lo haría así:

Código: [Seleccionar]
#define PULSADOR PIN_A2
int Modo;
.
.

Modo = 0;

while(1){

          if  !input(PULSADOR)  Modo++;

          switch(Modo)
             {
             case 0:    Option_0(); break;
             case 1:    Option_1(); break;
             case 2:    Option_2(); break;
             case 3:    Modo = 0; break;
             }

}

Un saludo
Título: Re: Como se puede selecionar una opcion de un menu usando un solo selector?
Publicado por: Nocturno en 22 de Enero de 2010, 19:04:45
Ese algoritmo tuyo tiene un problema, Jesús.

Cualquier opción del menú que necesite más de un click habrá pasado necesariamente por la ejecución de las anteriores.

Creo que habría que añadir un contador de tiempo para saber cuándo hemos elegido sólo un click, o dos, o tres...