Autor Tema: Problemas con menú en LCD  (Leído 1679 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado noral

  • PIC10
  • *
  • Mensajes: 17
Problemas con menú en LCD
« en: 18 de Junio de 2014, 14:39:30 »
Buenas,

Estoy realizando un proyecto con un PIC24FJ128GC010, un acelerómetro analógico y un módulo bluetooth RN42. El compilador que utilizo es el CCS.

Estoy desarrollando un menú de usuario con dos botones para introducir un valor. Para ello utilizo un contador incremental de pulsaciones que encontré por el foro para introducir las centenas en el "MENU2" y las decenas en el "MENU3. Con el boton izquierdo (botonizq) hago el incremento y con el botón derecho quiero mover el cursor para introducir las decenas.

 Al desarrollarlo tengo un problema que no consigo solucionar y es que no logro pasar del "MENU2".

Alguien que pueda ayudarme? Os adjunto el código.

Código:

Código: [Seleccionar]
#include <24FJ128GC010.H>
#device adc=12
#fuses FRC, NOWDT, NOPROTECT, BROWNOUT, ICSP1
#use delay(clock = 8000000)
#include <flex_lcd.c>
#define ledrojo PIN_E0
#define ledverde PIN_E1
#define botonder PIN_E2
#define botonizq PIN_E3
#define buzzer PIN_E4
int boton;


//==========================

float tension;
signed int32 read;
int menu=1;
int i=0;
char tabNum[10]={'0','1','2','3','4','5','6','7','8','9'},j=0;
int mov[10];
int centenas;
int decenas;
int unidades;

void configurar(void);

void main()
{
    disable_interrupts(GLOBAL);

    setup_oscillator(OSC_INTERNAL,8000000);

    output_low(ledrojo);
    output_low(ledverde);
    output_low(buzzer);

    lcd_init();
    delay_ms(100);
    lcd_gotoxy(1,1);
    printf(lcd_putc,"\fLISTO!");
    printf(lcd_putc,"\n");
    delay_ms(1500);
    printf(lcd_putc,"\f");
    delay_ms(750);

    while(1)
    {
        if(input(botonder)==1){ //boton
            delay_ms(30);
        if(input(botonder)==1){
            output_toggle(PIN_E0); //salida led
            output_toggle(PIN_E1); //salida led
            configurar();
            menu++;
            if (menu==7){
                menu=1;
                delay_ms(30);
            }
            while(input(botonder)==1);
        }
        }
    }
}

void configurar()
{
    switch (menu)
    {
        case 1:menu=1;
        {
            printf(lcd_putc, "\f");
            printf(lcd_putc, "\n          INICIO");
        }
        break;
        case 2: menu=2;
        {
            printf(lcd_putc, "\fMENU2:");
            printf(lcd_putc, "\n             -->");
            while(menu=2){                     
                if(input(botonizq)){                 
                        do{                           
                        }while(input(botonizq));
                        delay_ms(75);
                        if(j>9){                     
                            j=0;                     
                            output_high(buzzer);         
                            delay_ms(50);               
                            output_low(buzzer);           
                         }
                         lcd_gotoxy(1,2);
                         printf(lcd_putc,"%c",tabNum[j]);   
                         printf(lcd_putc,"\b");           
                         j++;
                         //incremento contador indice tabNum
                }
                if(input(botonder)==1){
                    menu=3;
                }
            }                     
        centenas=j*100;               
        }
        break;
        case 3: menu=3;
        {
            printf(lcd_putc, "\fMENU3:");
            while (menu==3){                     
                if(!input(botonizq)){                 
                    do{                           
                    }while(!input(botonizq));           
                        if(j>9){                     
                        j=0;                     
                        output_high(buzzer);       
                        delay_ms(50);               
                        output_low(buzzer);           
                        }
                    lcd_gotoxy(2,2);
                    printf(lcd_putc,"a");   
                    //printf(lcd_putc,"\b");           
                    j++;                       
                }
            }                     
            decenas=j*10;
        }
}
}

Desconectado noral

  • PIC10
  • *
  • Mensajes: 17
Re: Problemas con menú en LCD
« Respuesta #1 en: 23 de Junio de 2014, 08:40:15 »
Nadie en la casa puede echarme un cable?

Sigo muy estancado  :5] :5] :5]

Desconectado allennet

  • PIC16
  • ***
  • Mensajes: 108
Re: Problemas con menú en LCD
« Respuesta #2 en: 24 de Junio de 2014, 01:15:48 »
segun leo esta expresion esta incorrecta

while(menu=2)

deberia ser

while(menu==2){
"La curiosidad mato al gato, pero murio sabiendo"

Desconectado man3s

  • PIC12
  • **
  • Mensajes: 69
Re: Problemas con menú en LCD
« Respuesta #3 en: 24 de Junio de 2014, 12:37:31 »
Que tal amigo,

Lo que comenta allennet es verdad, cuando haces while(menu=2) es como si hicieras while(2) y recordando que en C todo valor distinto de 0 es verdadero, ese condicion siempre se cumplira, lo correcto es while(menu == 2), revisa este detalle y checa si funciona.

Saludos.