Autor Tema: Menus and push buttons  (Leído 1741 veces)

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

Desconectado seranko

  • PIC10
  • *
  • Mensajes: 3
Menus and push buttons
« en: 16 de Septiembre de 2006, 22:10:26 »
Hola a todos,  finalmente encontre el foro que buscaba esta super bueno...

Estoy en el proceso de aprendizaje de PicBasic Pro y necesito algo de ayuda.  El proyecto que tengo en mente va a tener 2 push buttons (los de tipo push-to-make), uno va a ser RUN/SET y el otro MODES. 

La idea es hacer que el equipo cuando se prenda este en modo SET, pase a modo RUN cuando presiono el boton RUN/SET una vez, pase a modo SET cuando presiono el boton RUN/SET otra vez y asi sucesivamente.  Cuando esta en modo SET se permite cambiar los MODES (de los que pienso tener 4 diferentes), cuando esta en modo RUN no hay cambios de MODES.

Como hago el algoritmo para hacer esto, tanto el RUN/SET como el cambio de los MODES teniendo en cuenta que son 2 push buttoms y que estos regresan a su estado inicial "0" cada vez que lo suelto ???

Les agradezco mucho la ayuda que me puedan brindar y gracias de antemano...

AABHGA

  • Visitante
Re: Menus and push buttons
« Respuesta #1 en: 16 de Septiembre de 2006, 23:03:35 »
Haber, por lo que entiendo, el programa va a tener 2 opciones y varios modos, un botón controla si está en opcion RUN o en opción SET, y que cuando comienze a trabajar este en opción run.

Si esto es así, entonces despues de que definas variables y todo lo relacionado, deberás poner una linea que es:

GOTO RUN (Para que valla a la opción RUN donde:)

RUN:
Aquí vendría el código de lo que hace esta opción.
Tambien debe ir una linea que revisa el botón si se ha presionado o no, por ej sería algo como:
IF PORTA.0 = 0 THEN
    PAUSE 500 (Que se detenga durante medio segundo para que se alcanze a soltar el suiche y no vaya y alcanze a regresar
    GOTO SET
ENDIF (Aquí revisa el estado del botón, recuerda que el suiche, debe ir conectado a GND y al PORTA.0, a su vez debe llevar una resistencia de 10K (de pull up) entre el PORTA.0 y el VDD)

SET:
Aquí viene el código de esta opción y debe llevar la misma linea que revisa el estado del boton así:
IF PORTA.0 = 0 THEN
    PAUSE 500
    GOTO RUN
ENDIF

Ten en cuenta que lo anterior trabajará sí y solo sí cada opción es un bucle (que se repita el proceso de manera infinita), osea que al final de cada opción debe llevar un GOTO SET o GOTO RUN dependiendo de en cual esté, osea:

SET:
Código
Revisar botón
GOTO SET

Lo mismo para run. ademas si quieres cambiar los modes necesitas poner el otro suiche con las mismas conexiónes y dentro del set que es el que cambia modes pones lo siguiente:

SET:
Código
Revisar botón

IF PORTA.1 = 0 THEN
    IF MODE = N  THEN (Donde N es reemplazado por el MODE mas alto que haya osea un 5 un 7, todo depende de tu programa)
        MODE = 0
    ENDIF
    MODE = MODE + 1 (Mode es una variable)
ENDIF

IF MODE = 1 THEN
    Código del Mode 1
ENDIF

IF MODE = 2 THEN
    Código del Mode 2
ENDIF

IF MODE = N THEN
    Código del Mode N (Donde N es el MODE máximo que hay)
ENDIF
GOTO SET

Espero que te sea de ayuda, cualquier duda al respecto no dudes en formularla.

Desconectado seranko

  • PIC10
  • *
  • Mensajes: 3
Menus and push buttons
« Respuesta #2 en: 17 de Septiembre de 2006, 12:22:19 »
Alvaro, super tu ayuda.  Ya lo tengo listo y funcionando. 

En la forma como tienes planteado el algoritmo para los MODES el va a mostrarlos todos en forma secuancial a penas se presione el boton de PORTA.1.  Para que pare MODE por MODE hice lo siguiente, de pronto le sirve a alguien...

Nuevamente gracias por ayudarme

SET
    IF PORTA.1=0 THEN
        IF MODE = N  THEN
            MODE = 0
        ENDIF
    endif
' MODE 0
    IF MODE = 0 and PORTA.1=1  THEN
        El codigo
        MODEMENU = MODEMENU + 1
    ENDIF
' MODE 1
    IF MODE = 1 and PORTA.1=1  THEN
        El codigo
        MODEMENU = MODEMENU + 1
    ENDIF
' MODE 2
    IF MODE = 2 and PORTA.1=1  THEN
        El codigo
        MODEMENU = MODEMENU + 1
    ENDIF

' MODE N
    IF MODE = N and PORTA.1=1  THEN
        El codigo
        MODEMENU = MODEMENU + 1
    ENDIF
GOTO SET
« Última modificación: 17 de Septiembre de 2006, 12:36:25 por seranko »

AABHGA

  • Visitante
Re: Menus and push buttons
« Respuesta #3 en: 17 de Septiembre de 2006, 17:42:40 »
De manera secuencial, talvez sucede por el hecho que faltó un pause.

IF PORTA.1 = 0 THEN
    PAUSE 500 (Este pause para que diera tiempo a soltar el botón)
    IF MODE = N THEN
        MODE = MO....

Eso talvez hacia que lo mostrara de manera secuencial, o lo mostraría de manera secuencial si:

El suiche no es un pulsador.
El suiche es un pulsador pero normalmente cerrado.