TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: noral en 18 de Junio de 2014, 14:39:30

Título: Problemas con menú en LCD
Publicado por: noral 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;
        }
}
}
Título: Re: Problemas con menú en LCD
Publicado por: noral en 23 de Junio de 2014, 08:40:15
Nadie en la casa puede echarme un cable?

Sigo muy estancado  :5] :5] :5]
Título: Re: Problemas con menú en LCD
Publicado por: allennet en 24 de Junio de 2014, 01:15:48
segun leo esta expresion esta incorrecta

while(menu=2)

deberia ser

while(menu==2){
Título: Re: Problemas con menú en LCD
Publicado por: man3s 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.