TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado 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:
#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;
}
}
}
-
Nadie en la casa puede echarme un cable?
Sigo muy estancado :5] :5] :5]
-
segun leo esta expresion esta incorrecta
while(menu=2)
deberia ser
while(menu==2){
-
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.