Salve ragazzi, sono nuovo e voglio porvi un problema.
Sto usando un lcd nokia+joistick della nuelectronics su arduino 2009.
Vi posto il codice che da come esempio la nuelectronics:
void setup()
{
lcd.LCD_3310_init();
lcd.LCD_3310_clear();
//menu initialization
init_MENU();
current_menu_item = 0;
}
void loop()
{
byte i;
for(i=0; i<NUM_KEYS; i++){
if(button_flag[i] !=0){
button_flag[i]=0; // reset button flag
switch(i){
case UP_KEY:
// current item to normal display
lcd.LCD_3310_write_string(MENU_X, MENU_Y + current_menu_item, menu_items[current_menu_item], MENU_NORMAL );
current_menu_item -=1;
if(current_menu_item <0) current_menu_item = NUM_MENU_ITEM -1;
// next item to highlight display
lcd.LCD_3310_write_string(MENU_X, MENU_Y + current_menu_item, menu_items[current_menu_item], MENU_HIGHLIGHT );
break;
case DOWN_KEY:
// current item to normal display
lcd.LCD_3310_write_string(MENU_X, MENU_Y + current_menu_item, menu_items[current_menu_item], MENU_NORMAL );
current_menu_item +=1;
if(current_menu_item >(NUM_MENU_ITEM-1)) current_menu_item = 0;
// next item to highlight display
lcd.LCD_3310_write_string(MENU_X, MENU_Y + current_menu_item, menu_items[current_menu_item], MENU_HIGHLIGHT );
break;
case LEFT_KEY:
init_MENU();
current_menu_item = 0;
break;
case RIGHT_KEY:
lcd.LCD_3310_clear();
(*menu_funcs[current_menu_item])();
lcd.LCD_3310_clear();
init_MENU();
current_menu_item = 0;
break;
}
}
}
}
Vi spiego :
Viene creato un menù con la init_MENU() . appena creato il menù parte lo switch nella loop per scorrerlo.
Si entra nelle scelte del menù con il tasto destro del joistick e parte un funzione (*menu_funcs[current_menu_item])();
come potete vedere se si scorre il menù aumenta current_menu_item, quindi in base alla voce del menù selezionato si entra in una relativa finestra.
Quello che ho fatto è che appena viene premuto il tasto sx lancio un init_menu_1(), solo che a questo punto dovrebbe partire uno switch nel case LEFT_KEY solo che tale switch non lavora, e quindi il sotto menù non scorre.
la domanda è questa:
Come faccio a creare un switch che dipende dallo switch sopracitato?
Ovvero sembra che nel case LEFT_KEY non gira il loop e quindi non posso fare nulla di dinamico.
dovrei fare una cosa di questo genere:
void setup()
{
lcd.LCD_3310_init();
lcd.LCD_3310_clear();
//menu initialization
init_MENU();
current_menu_item = 0;
}
void loop()
{
byte i;
for(i=0; i<NUM_KEYS; i++){
if(button_flag[i] !=0){
button_flag[i]=0; // reset button flag
switch(i){
case UP_KEY:
// current item to normal display
lcd.LCD_3310_write_string(MENU_X, MENU_Y + current_menu_item, menu_items[current_menu_item], MENU_NORMAL );
current_menu_item -=1;
if(current_menu_item <0) current_menu_item = NUM_MENU_ITEM -1;
// next item to highlight display
lcd.LCD_3310_write_string(MENU_X, MENU_Y + current_menu_item, menu_items[current_menu_item], MENU_HIGHLIGHT );
break;
case DOWN_KEY:
// current item to normal display
lcd.LCD_3310_write_string(MENU_X, MENU_Y + current_menu_item, menu_items[current_menu_item], MENU_NORMAL );
current_menu_item +=1;
if(current_menu_item >(NUM_MENU_ITEM-1)) current_menu_item = 0;
// next item to highlight display
lcd.LCD_3310_write_string(MENU_X, MENU_Y + current_menu_item, menu_items[current_menu_item], MENU_HIGHLIGHT );
break;
case LEFT_KEY:
init_MENU_1();
current_menu_item = 0;
/*----------------------------------------------------------------*/
byte j;
for(j=0; j<NUM_KEYS; j++){
if(button_flag[i] !=0){
button_flag[j]=0; // reset button flag
switch(j){
case UP_KEY:
// current item to normal display
lcd.LCD_3310_write_string(MENU_X, MENU_Y + current_menu_item, menu_items[current_menu_item], MENU_NORMAL );
current_menu_item -=1;
if(current_menu_item <0) current_menu_item = NUM_MENU_ITEM -1;
// next item to highlight display
lcd.LCD_3310_write_string(MENU_X, MENU_Y + current_menu_item, menu_items[current_menu_item], MENU_HIGHLIGHT );
break;
/*-----------------------------------------------------------------*/
break;
case RIGHT_KEY:
lcd.LCD_3310_clear();
(*menu_funcs[current_menu_item])();
lcd.LCD_3310_clear();
init_MENU();
current_menu_item = 0;
break;
}
}
}
}
Speriamo che capite il mio problema altrimetni sono costretto a postarvi tutto il codice