Autor Tema: Problemas con submenus  (Leído 5048 veces)

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

Desconectado Tempus

  • PIC10
  • *
  • Mensajes: 37
Problemas con submenus
« en: 19 de Febrero de 2009, 11:44:07 »
Hola tengo una duda no se como se crean submenus que se muestren en la lcd estoy trabajando con el 16f876 y lo que quier es que pulsando un pulsador que en mi caso es el ra3 entre en modo progrmacion y que en la pantalla de la lcd muestre  lo siguiente:

introducir hora de funcionamiento motor 1 y le meteria la hora a la que va a funcionar el motor

y la segunda variable seria introducir hora de funcionamientode motor 2 y cuando le metos todoslos datos que directamente salga al menu principal donde
tengo puesto un reloj

As agradezco cualkier opinion gracias

adjunto mi c, mi proteus

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Problemas con submenus
« Respuesta #1 en: 19 de Febrero de 2009, 14:06:48 »
hola,
es cuestion de crear pantallas o máscaras para tus submenus. puedes comenzar haciendo una pantalla con mensaje de presentacion, luego le das 2 segundos y cargas otra pantalla de la misma forma que hicistes la anterior.

se entendio o no era eso lo que necesitabas.

saludos  :-/
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado Tempus

  • PIC10
  • *
  • Mensajes: 37
Re: Problemas con submenus
« Respuesta #2 en: 19 de Febrero de 2009, 14:12:04 »
Pero el problema que tengo es que necesito ver como se hace una y ver donde la tengo que poner dentro del programa en c una vez visto donde va una y su estructura lo demas ya sabria seguir yo

te agradeceria que metiers un en mi programa en c para verlo, gracias x contestar

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: Problemas con submenus
« Respuesta #3 en: 19 de Febrero de 2009, 14:12:47 »
Hola:

En efecto, es bastante simple, algo más que deberías tomar en cuanta es un antirebote de tecla por si alguien se quiere "prender" del pulsante, además de borrar la pantalla antes de un nuevo mensaje y al final para que no quede basura.

Desconectado Tempus

  • PIC10
  • *
  • Mensajes: 37
Re: Problemas con submenus
« Respuesta #4 en: 19 de Febrero de 2009, 14:15:52 »
Entiendo todo el funcionamiento de los antirebotes , limpiar pantalla y todo pero lo que me falla es saber donde lo tengo que poner en mi programa,

gracias x vuestra colaboracion

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: Problemas con submenus
« Respuesta #5 en: 19 de Febrero de 2009, 14:18:26 »
Pero el problema que tengo es que necesito ver como se hace una y ver donde la tengo que poner dentro del programa en c una vez visto donde va una y su estructura lo demas ya sabria seguir yo

te agradeceria que metiers un en mi programa en c para verlo, gracias x contestar

Hola:

Vemos, al parecer esto es cuestión de sentido común solamente, si quieres mostrar algo cuando se presione el botón, pues será en esa parta, no lo tienes que mostrar cuando arranque, no te parece? Imagino que tienes un condicional para saber el estado del pulsante, por ejemplo:

Si el pulsante ha sido presionado then
     antirebote
     muestras el mensaje
fin del condicional.

Si no entiendes la estructura del C o como se usa una pantalla en este lenguaje, pásate por el subforo de lenguaje C y mira los ejemplos de J1M:

http://www.todopic.com.ar/foros/index.php?topic=4530.0
    

Desconectado Tempus

  • PIC10
  • *
  • Mensajes: 37
Re: Problemas con submenus
« Respuesta #6 en: 19 de Febrero de 2009, 14:44:09 »
lo siento pero stoy mirando los ejemplos y no se hacerlo, gracias de todas formas x ayudarme ya intentare  probar cosas para que funcione es que necesito verlo par saber el xk

Desconectado jim_17

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 309
    • Blog personal
Re: Problemas con submenus
« Respuesta #7 en: 19 de Febrero de 2009, 15:29:42 »
Tienes algun trozo de código hecho ? Postealo en el mensaje.

Para guiarte un poco los submenus los puedes hacer con if - else, switch - case y whiles.

Antes de programar primero de todo: Diagrama de Flujo. Supongamos que solo tenemos un par de teclas. la tecla nº 1 y la tecla nº 2.

tecla nº1 pusaldo ? -- Sí (tecla nº1) --- Introducir hora --- Por cada pulsacion de tecla nº1 aumentamos en 1 la hora, Si pulsamos la nº2 cambiamos y pasamos a modificar
                                                  los minutos y luego los segundos. Si tecla nº2 esta pulsada permanentemente, salimos del modo "cambiar hora motor 1" y 
                                                  modificamos la del motor2. Si mantenemos pulsado tecla nº2 salimos del "cambiar hora motor2".
                           
                            -- No --- Comprovar otra vez.

Salu2.
Share the world !

Blog's

http://www.area0x33.com

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Problemas con submenus
« Respuesta #8 en: 19 de Febrero de 2009, 15:43:08 »
He recibido tu mensaje privado , Tempus. Pero lo que pasa que no programo en C, sólo en assembler. Estoy recién empezando a aprender C y me pierdo en el #include  :mrgreen:  :D :D
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado Tempus

  • PIC10
  • *
  • Mensajes: 37
Re: Problemas con submenus
« Respuesta #9 en: 19 de Febrero de 2009, 15:51:40 »
tengo echo esto

es  un mensaje de bienvenida
reloj mas termometro
y lo que estoy intentando ahora es que cuando pulso ra3 que me salga un menu mas menos asi

modo progrmacion
                       y cuando entre en el modo programacion haytendre dos opciones una para poner en hora el reloj y otra para programar la hora de funcionamient de dos motores


#include <16F876.h>
#device adc=8
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES XT                       //Crystal osc <= 4mhz
#FUSES PUT                      //Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES BROWNOUT                 //Reset when brownout detected
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection

#use delay(clock=4000000)
#define use_portb_lcd TRUE
#include <lcd.c>

///DEFINICION DE FUNCIONES   
void configurar(void);
void choras(void);               
void cminutos(void);
int segundos,minutos,horas,temperatura;
int seg=0;
byte menu=0,flag=0,var=2;         //variables para menu configurar

 
       //INTERRUPCION//
#int_rtcc                             //Habilita interrupción timer0
void interrupt_timer(void){
   seg++;
   if(seg==125){                    //Condición de cambio
      segundos++;                  // cuenta 1 segundo
      seg=0;                      //reiniciar cuenta
   }
   set_timer0(131);  //Inicializa Timer0
}

void main(void){
   setup_adc_ports(RA0_ANALOG);                  // configura RA0 como entrada analogica
   set_tris_a(0xff);
   setup_adc(ADC_CLOCK_INTERNAL);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_64);  //Configura timer0 y prescaler
   set_timer0(131);                          //Inicializa timer0
   enable_interrupts(INT_RTCC);             //Habilita interrupción timer0
   enable_interrupts(GLOBAL);              //Habilita Interrupciones
   lcd_init();// inicializa el LCD
   set_adc_channel(0);
   delay_us(20);
   
     lcd_putc("Comedero Peces\nPino & Azparren" );   //presentacion...
     delay_ms(4000);                           
   while(true)
   {
      temperatura=read_adc();//lee valor analogico
      if(segundos>59)
      {
         segundos=0;
         minutos++;
         if(minutos>59)
         {
            minutos=0;
            horas++;
            if(horas>24)
               horas=0;
         }
      }
         lcd_init();          //inicializa lcd
     
         printf (lcd_putc,"\f%02u:%02u:%02u  T:%d%cC\n H.COMIDA: 13:45" ,horas,minutos,segundos,temperatura*2,0xdf);
         delay_ms(100);
   }
}

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Problemas con submenus
« Respuesta #10 en: 19 de Febrero de 2009, 16:02:05 »
A ver. COmo ya te dije no entiendo ni papa de C. Pero por lo que he visto el muy desgraciado te da facilmente la opción de fabricar menues como si estuvieses en un restaurant con solo unas pocas lineas.
Creo que primero tienes que declarar una variable que te sirva de bandera. AL inicio que sea = 0

Luego  entras al menu principal

Miras la bandera (al inicio será 0) y te vas donde te diga la bandera. Si es uno te vas al menu 1, si es 2 al menu 2, etc
si es 0 me mantego haciendo nada y mirando las entradas

miras las entradas
si se activó la entrada 1 entonces pones bandera = 1
si se activó la entrada 2 entonces pones bandera = 2
etc
etc
vuelves al menu principal

Menu 1
activo el comedero de peces
bandera = 0
vuelvo a menu principal

Menu 2
activo el comedero de tiburones
bandera = 0
vuelvo a menu principal

etc

etc


Algo por el estilo. Es lo bueno de C , que puedes hacer menues como churros


Y AHORA ME VOY A JUGAR AL FALLEN EARTH, que tengo la closed beta y no la voy a desperdiciar.  :mrgreen:
« Última modificación: 19 de Febrero de 2009, 16:04:38 por pibe »
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado Tempus

  • PIC10
  • *
  • Mensajes: 37
Re: Problemas con submenus
« Respuesta #11 en: 19 de Febrero de 2009, 16:04:36 »
gracias x tu respuesta y muy bueno lo de los tiburones jejejejje voy a probar a hacerlo asi y ya te contare

saludos

Desconectado Tempus

  • PIC10
  • *
  • Mensajes: 37
Re: Problemas con submenus
« Respuesta #12 en: 19 de Febrero de 2009, 16:22:08 »
hola buenas de nuevo estube haciendo esto:

#include <16F876.h>
#device adc=8
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES XT                       //Crystal osc <= 4mhz
#FUSES PUT                      //Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES BROWNOUT                 //Reset when brownout detected
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection

#use delay(clock=4000000)
#define use_portb_lcd TRUE
#include <lcd.c>

///DEFINICION DE FUNCIONES   
void configurar(void);
void choras(void);               
void cminutos(void);
int segundos,minutos,horas,temperatura;
int seg=0;
byte menu=0,flag=0,var=2;         //variables para menu configurar

  //********************* //INTERRUPCION//************************************\\
       
#int_rtcc                             //Habilita interrupción timer0
void interrupt_timer(void){
   seg++;
   if(seg==125){                    //Condición de cambio
      segundos++;                  // cuenta 1 segundo
      seg=0;                      //reiniciar cuenta
   }
   set_timer0(131);  //Inicializa Timer0
}

void main(void){
   setup_adc_ports(RA0_ANALOG);                  // configura RA0 como entrada analogica
   set_tris_a(0xff);
   setup_adc(ADC_CLOCK_INTERNAL);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_64);  //Configura timer0 y prescaler
   set_timer0(131);                          //Inicializa timer0
   enable_interrupts(INT_RTCC);             //Habilita interrupción timer0
   enable_interrupts(GLOBAL);              //Habilita Interrupciones
   lcd_init();// inicializa el LCD
   set_adc_channel(0);
   delay_us(20);
   
     lcd_putc("Comedero Peces\nPino & Azparren" );   //presentacion...
     delay_ms(4000);                           
   while(true)
   {
      temperatura=read_adc();//lee valor analogico
      if(segundos>59)
      {
         segundos=0;
         minutos++;
         if(minutos>59)
         {
            minutos=0;
            horas++;
            if(horas>24)
               horas=0;
         }
      }
         lcd_init();          //inicializa lcd
     
         printf (lcd_putc,"\f%02u:%02u:%02u  T:%d%cC\n H.COMIDA: 13:45" ,horas,minutos,segundos,temperatura*2,0xdf);
         delay_ms(100);
   }
}
      ///FUNCION CONFIGURAR
void configurar(void)
{
   disable_interrupts(GLOBAL);               //desactivadas interrupciones
   
   do{
      switch(menu){
         case 0:   lcd_putc("fConfigurar horas?" );      //horas

               if(!input(PIN_A5))
               {
                  while(!input(PIN_A5)){}
                  choras();
                  menu=1;                     

               }
               break;
         case 1: lcd_putc("fConfigurar minutos?" );      //minutos

               if(!input(PIN_A5))
               {
                  while(!input(PIN_A5)){}
                  cminutos();
                  menu=2;     
               }     
     
   
   

      }
   }
}

pero al final me da un error linea 103  expect while
OS ADJUNTO EL C PARAVER SI ME PODEIS DECIR CUAL ES EL FALLLO

GRACIAS NUEVAMENTE X TODO

Desconectado cerebro

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
Re: Problemas con submenus
« Respuesta #13 en: 19 de Febrero de 2009, 16:40:24 »
permiso me meto un poquito...
Código: [Seleccionar]
[color=red]do{[/color]
      switch(menu){
         case 0:   lcd_putc("fConfigurar horas?" );      //horas

               if(!input(PIN_A5))
               {
                  while(!input(PIN_A5)){}
                  choras();
                  menu=1;                     

               }
               break;
         case 1: lcd_putc("fConfigurar minutos?" );      //minutos

               [color=blue]if(!input(PIN_A5))[/color]
               {
                  [color=red]while(!input(PIN_A5)){}[/color]
                  cminutos();
                  menu=2;     
               }     
     
   
   

      }

eso pasa porque el bucle do{} while() // no  puede completarse
eso se soluciona asi

Código: [Seleccionar]
  do{
      switch(menu){
         case 0:   lcd_putc("fConfigurar horas?" );      //horas

               if(!input(PIN_A5))
               {
                  while(!input(PIN_A5)){}
                  choras();
                  menu=1;                     

               }
               break;
         case 1: lcd_putc("fConfigurar minutos?" );      //minutos

               if(!input(PIN_A5))
               {
                  while(!input(PIN_A5))
                  cminutos();
                  menu=2;     
               }     
     
   
   

      }
   [color=red]}while(1);[/color]

igualmente no entiendo para que esta ese bucle do-while yo lo sacaria...
saludos
LAS MALVINAS SON ARGENTINAS!

Desconectado Tempus

  • PIC10
  • *
  • Mensajes: 37
Re: Problemas con submenus
« Respuesta #14 en: 19 de Febrero de 2009, 16:45:59 »
gracias x tu respuesta entonces como harias tu el programa sin el do

SI puedes ponlo para k lo vea gracias

y ncantado de verte x aki


 

anything