Autor Tema: Menus interactivos con lcd  (Leído 3979 veces)

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

Desconectado dchoc

  • PIC10
  • *
  • Mensajes: 16
Menus interactivos con lcd
« en: 29 de Mayo de 2007, 18:01:50 »
Hola gente.
Estoy haciendo un menu interactivo, tipo 1-configurar A opcion 1, opcion 2, opcion 3, volver.
y dentro de opcion 1 : opcion 1.1, opcion 1.2, opcion 1.3, volver.
y dentro de opcion 2:  opcion 2.1, opcion 2.2 opcion 2.3, volver.

el tema es que se me esta haciendo muyyyyyyy pesado el programa, ni llegue a la mitad del menu que ya me chupo 1k.

masomenos vengo asi:

miro con el comando BUTTON si aprete una tecla ( si llega abajo vuelvo con goto, sino el comando button salta a : arriba,abajo o enter.
arriba sube un numero una variable vmenu
si arriba se paso de la cantidad de opciones => arriba = 1


y despues imprime en una rutina tipo gosub imprimir, y en imprimir imprime de acuerdo a la variable vmenu que indique antes.
esto anda joya, o sea menu de 1 nivel es una papa ( ja!)

el problema es cuando entro en submenues, empeze a repetir codigo.. se me descontroló.
Si hay ejemplos por ahi o tira una mano le agradezco mucho!
por ahi revolviendo un foro hablaban de un programita llamado menubuilder pero no lo pude encontrar.

Saludos!
« Última modificación: 29 de Mayo de 2007, 18:26:31 por navaismo »

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: Menus interactivos con lcd
« Respuesta #1 en: 29 de Mayo de 2007, 18:28:07 »
Puedes poner el codigo. Para que le miremos y veamos por donde atacar.
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."

Desconectado dchoc

  • PIC10
  • *
  • Mensajes: 16
Re: Menus interactivos con lcd
« Respuesta #2 en: 29 de Mayo de 2007, 19:16:29 »

  Como hago para publicar codigo? lo pego aca? lo mando como adjunto? gracias!

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: Menus interactivos con lcd
« Respuesta #3 en: 29 de Mayo de 2007, 20:01:56 »
a pues hay un icono con el simbolo de numeral o mejor conocicomo gato con eso puedes ponerlo o bien puedes poner sin espacios entre los corchetes asi:

[ code=freebasic ]

tu codigo


[ /code ]
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."

Desconectado dchoc

  • PIC10
  • *
  • Mensajes: 16
Re: Menus interactivos con lcd
« Respuesta #4 en: 29 de Mayo de 2007, 20:42:17 »
es un menu de 4 opciones, y solo tiene implementada la 1er opcion.. que es el ajuste de un reloj. las otras opciones no estan implementadas.
acepto criticas, risas y demas.. ya q es mi 1er codigo nada me ofente!



Código: FreeBasic
  1. SYMBOL SW1 = PORTA.3 ' Switch 1 "arriba"
  2. SYMBOL SW2 = PORTA.4 ' Switch 2 "abajo"
  3. SYMBOL SW3 = PORTB.3 ' Switch 3 "enter"
  4.  
  5. mlcd VAR BYTE ' menu-lcd, este indica la posicion en el menu
  6. POSI VAR BYTE '
  7.  
  8. sw1var var byte
  9. sw2var var byte
  10. sw3var var byte
  11.  
  12. venter var bit
  13. hora var byte
  14. minuto var byte
  15.  
  16.  
  17.  
  18. Define LCD_DREG PORTB
  19. Define LCD_DBIT 4
  20. Define LCD_RSREG PORTB
  21. Define LCD_RSBIT 0
  22. Define LCD_EREG PORTB
  23. Define LCD_EBIT 1
  24.  
  25.  
  26. input PORTB.3
  27. INPUT PORTA.3
  28. input PORTA.4
  29.  
  30. hora = 00
  31. minuto = 00
  32.  
  33. mainmenu:                           'menu de configuracion
  34.     mlcd = 1                        'variable que indica la posicion
  35.     lcdout $fe,1, "CONFIGURACION"   'actual del menu
  36.     pause 1000
  37.  
  38. impmenu:                    
  39.     gosub imprimir                  'imprime el menu                                
  40.  
  41. menu:  
  42.     button sw1,1,0,0,sw1var,1,arriba     'mira sw1 boton arriba
  43.     button sw2,1,0,0,sw2var,1,abajo      'mira sw2 boton abajo
  44.     BUTTON SW3,1,0,0,sw3var,1,enter      'mira sw3 boton enter
  45.     goto menu
  46.  
  47.  
  48. '******************************************
  49. '*   movimiento dentro del menu           *
  50. '******************************************
  51.  
  52.  
  53. arriba:
  54.     mlcd = mlcd + 1            'se pulso sw1, suma 1 a mlcd
  55.     if mlcd = 5 then mlcd = 1  'items del menu 1-4, si es 5 vuelve a 1  
  56.     goto impmenu               ' vuelve a imprimir y mirar botones
  57.  
  58. abajo:
  59.     mlcd = mlcd - 1           ' se pulso sw2, resta 1 a mlcd
  60.     if mlcd = 0 then mlcd = 4 ' si menu llego a 0, vuelve a 4
  61.     goto impmenu
  62.  
  63. enter:                          ' se pulso enter en mlcd=1 ( ajuste horas)
  64.  
  65. ajhora:
  66.     mlcd = 11                              'mlcd=11 es ajuste de horas
  67.     gosub imprimir
  68. ajhora1:    
  69.     button sw1,1,0,0,sw1var,1,mashora     'mira boton arriba, + horas
  70.     button sw2,1,0,0,sw2var,1,menoshora   'mira boton abajo, - horas
  71.     BUTTON SW3,1,0,0,sw3var,1,ajmin       'enter pasa a minutos
  72.     goto ajhora1
  73.      
  74.  
  75. ajmin:    
  76.     mlcd = 10                               'mlcd = 10, configuracion de minuitos
  77.     gosub imprimir                          ' imprime configuracion de minutos
  78. ajmin1:    
  79.     button sw1,1,0,0,sw1var,1,masmin     ' mira boton arriba, + minutos
  80.     button sw2,1,0,0,sw2var,1,menosmin   ' mira boton abajo, - minutos
  81.     BUTTON SW3,1,0,0,sw3var,1,finajhora  'mira boton enter, termina
  82.     goto ajmin1
  83.      
  84.      
  85.      
  86. mashora:                                  'rutina que suma horas
  87.     hora = hora + 1
  88.     if hora = 24 then hora = 00           'mantiene horas debajo de 24
  89.     goto ajhora
  90. menoshora:                                ' rutina que resta horas
  91.     hora = hora  - 1                      
  92.     if hora = 255 then hora = 23          'evita que horas baje de 00
  93.     goto ajhora
  94. masmin:                                   ' rutina que suma minutos
  95.     minuto = minuto + 1
  96.     if minuto = 60 then minuto = 00       ' evita que sean 60
  97.     goto ajmin
  98. menosmin:                                 ' rutina que resta minutos
  99.     minuto = minuto -1
  100.     if minuto = 255 then minuto = 59      ' evita que baje de 0
  101.     goto ajmin
  102.          
  103. finajhora:                                 'confirmacion de ajuste horario
  104.     mlcd = 12                              'mlcd=12 es la pantalla de confirmacion
  105.     gosub imprimir                         'muesta en el lcd
  106. confhora:                                  'espera que pulses una opcion
  107.     button sw1,1,0,0,sw1var,1,mainmenu     ' sw1 es salir
  108.     BUTTON SW3,1,0,0,sw3var,1,guardahora   'sw3 es guardar
  109.     goto confhora
  110.      
  111. guardahora                                 'aca se guarda la hora
  112. mlcd = 13                                  ' es a modo ejemplo
  113. gosub imprimir                             ' ya que no guarda nada
  114. pause 1500                                 '
  115. goto mainmenu
  116.  
  117.  
  118.  
  119.  
  120.  
  121. imprimir:
  122.     select case mlcd
  123.     CASE 1
  124.     POSI = 129 : GOSUB tag : GOSUB MSG1
  125.     POSI = 193 : GOSUB MSG2  
  126.  
  127.     CASE 2
  128.     POSI = 129 : GOSUB tag : GOSUB MSG2
  129.     POSI = 193 : GOSUB MSG3
  130.  
  131.     CASE 3
  132.     POSI = 129 : GOSUB tag : GOSUB MSG3
  133.     POSI = 193 : GOSUB MSG4
  134.  
  135.     CASE 4
  136.     POSI = 129 : GOSUB tag : GOSUB MSG4
  137.     POSI = 193 : GOSUB MSG5
  138.      
  139.     case 10      ' ajuste  minutos
  140.     posi = 128 : gosub msg11  
  141.     POSI = 193 : GOSUB MSG7
  142.      
  143.     case 11      ' ajuste horas  
  144.     posi = 128 : gosub msg6  
  145.     POSI = 193 : GOSUB MSG7
  146.      
  147.     case 12      ' confirmacion hora
  148.     posi = 129 : gosub msg8  
  149.     POSI = 193 : GOSUB MSG9
  150.      
  151.     case 13      ' guardando
  152.     posi = 129 : gosub msg0  
  153.     POSI = 129 : GOSUB MSG10
  154.     END SELECT
  155.  
  156.     return
  157.  
  158.  
  159.  
  160.  
  161. '************************************************* *************************************************
  162. ' Lista de mensajes
  163. '************************************************* *************************************************
  164. MSG0: LCDOUT $FE,1 :return 'limpialcd
  165. MSG1: LCDOUT $FE,POSI,"OPCION 1    " :RETURN
  166. MSG2: LCDOUT $FE,POSI,"OPCION 2    " :RETURN
  167. MSG3: LCDOUT $FE,POSI,"OPCION 3    " :RETURN
  168. MSG4: LCDOUT $FE,POSI,"OPCION 4    " :RETURN
  169. MSG5: LCDOUT $FE,POSI,"OPCION 5    " :RETURN
  170. MSG6: LCDOUT $FE,POSI,"Ajuste horas" :RETURN
  171. MSG7: LCDOUT $FE,POSI,dec2 hora,":",dec2 minuto,"                  " :RETURN
  172. MSG8: LCDOUT $FE,POSI,"GUARDAR -> OK  " :RETURN
  173. MSG9: LCDOUT $FE,POSI,"SALIR   ->  +  " :RETURN
  174. MSG10: LCDOUT $FE,POSI,"GUARDANDO HORA" :return
  175. MSG11: LCDOUT $FE,POSI,"Ajuste MINUTOS" :RETURN
  176. tag: LCDOUT $FE,128,">" :RETURN
  177.  
  178.  
  179. End

Desconectado dchoc

  • PIC10
  • *
  • Mensajes: 16
Re: Menus interactivos con lcd
« Respuesta #5 en: 29 de Mayo de 2007, 21:46:59 »
Encontre un codigo de ejemplo que segun dicen es muy bueno, pero no puedo acceder a el.
http://miarroba.com/foros/ver.php?foroid=58527&temaid=210279
ese es el link, el autor es pacalaconcurso, se llama menu2.bas y tambien esta el menubuilder.exe
por lo que puedo entender es este mismo foro, pero viejo.. ya que se lee por todos lados "nos mudamos".
el problema que tengo es que no tengo nivel para acceder a la descarga de dichos ficheros.
Si alguien tiene permisos en el "viejo foro" le agradezco muchisimo que los copie aca.-
Saludos

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: Menus interactivos con lcd
« Respuesta #6 en: 29 de Mayo de 2007, 23:35:37 »
No pues si esta largo, date una pasada por la seccion de proyectos de la web amiga y de mi amigo-maestro Lordlafebre Micros y mas Micros..only basic y busca el reloj despertador que hizo viene como configurar un rtc puede ayudarte.

Y entre otras cosas para que necesitas tanto en un menu???

Saludos.

PD. Si el foro es el viejito de mi@ y nos mudamos por falta de espcio y malos tratos. Tampoco se puede acceder a los archivos.
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."

Desconectado dchoc

  • PIC10
  • *
  • Mensajes: 16
Re: Menus interactivos con lcd
« Respuesta #7 en: 30 de Mayo de 2007, 21:27:09 »
Gracias x el link, hay buenos ejemplos!
el tema del menu largo: necesito configurar muchos parametros, en un futuro voy a implementar un sistema de control para mi acuario, el cual controlara la iluminacion y la temperatura.

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: Menus interactivos con lcd
« Respuesta #8 en: 31 de Mayo de 2007, 00:24:32 »
Lo que veo mas factible si es necesario tantos menus y codigo, es que uses un PIC con mas memoria.
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: Menus interactivos con lcd
« Respuesta #9 en: 31 de Mayo de 2007, 08:14:58 »
Hola amigo!
Yo uso PIC BASIC del PIC SIMULATOR IDE, por lo que quizas las cosas no sean exactamente iguales en PBP.

Tambien he hecho un menu bastante complejo, para definir tramos horarios con el estado (asociado a cada tramo) de 4 o 5 salidas, y me pasaba como a ti, temine usando un micro de 8Kb por que cada vez que "imprimo" algo en el display el programa se incrementa en 40 o 50 bytes.

Un paliativo es utilizar rutinas que impriman los textos que se repiten. Por ejemplo, si usas 5 veces la frase "<SI> <NO> <CANCEL>" puedes escribirla desde una subrutina, y ahorraras unos 200 o 250 bytes. No siempre es posible hacer esto, pero ayuda.

Saludos!
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: Menus interactivos con lcd
« Respuesta #10 en: 01 de Junio de 2007, 13:16:35 »
Los menús es que consumen mucha memoria y mas si tienen muchas ramificaciones.
he practicado con ellos en la programación de un RTC por medio de un LCD y tres teclas y otras pruebas con menús por medio del hyperterminal y el teclado del PC y realmente consumen mucha memoria.
Y eso que hasta donde he podido estudiar el Basic del PSI, utiliza llamadas a la misma función por lo que no duplica rutinas, pero incluso así requiere que el texto a enviar al lcd tenga una cabecera indicando el salto a la rutina y el numero de caracteres y el formato de estos que se quieren enviar, por lo que al final sale una buena cantidad de memoria, si son muchos textos los que tienes que mostrar una idea seria almacenarlos en la eprom del pic junto con algunos caracteres de control para que puedas saber donde empieza y donde termina cada texto, y luego una rutina genérica para que muestre los textos en pantalla, pero lo mejor desde luego es utilizar un micro con suficiente memoria.
Saludos desde Granada, España.


 

anything