Dopisałem obsługę 2 klawiszy gdzie funkcja key_g to przyciśnięcie klawisza górnego natomiast key_d to wciśnięcie klawisza dolnego.
Musimy jednak pamiętać o tym, że przewijanie menu w dół będzie dodawało 1 do flagi w efekcie przejdziemy z pozycji 5 na 6 i wypadniemy z obiegu pętli to samo stanie się gdzie flaga menu będzie zmniejszana wtedy z pozycji 0 przeskoczymy na 255. W tym celu musimy zadbać o to aby zmieniać wartość flagi zależnie od pozycji końcowej.Dodajmy sobie na samej górze deklarację funkcji klawiszy góra oraz dół.
1 2 |
void key_g(void); // funkcja odpowiadająca klawiszowi void key_d(void); // funkcja odpowiadająca klawiszowi |
Natomiast definicja funkcji wygląda następująco.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
// funkcja odpowiadająca klawiszowi void key_g(void){ if(menu_lcd){ // jeżeli jesteśmy w menu menu_cls(); flag_menu--; // przesuwamy pozycję w dół if (flag_menu == 254) flag_menu = 4; } } void key_d(void){ if(menu_lcd){ // jeżeli jesteśmy w menu menu_cls(); flag_menu++; // przesuwamy pozycję w dół if (flag_menu == 6) flag_menu = 0; } } |
Natomiast ciało funkcji odpowiadającej za wyświetlanie menu wzbogaciła się o kolejne sprawdzanie zmiennej flag_menu
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
void program_menu( void ){ if(flag_menu == 255){ lcd_locate(0,2); lcd_str(menu_txt[5]); lcd_locate(1,2); lcd_str(menu_txt[0]); }else if(flag_menu == 5){ lcd_locate(0,2); lcd_str(menu_txt[flag_menu]); lcd_locate(1,2); lcd_str(menu_txt[0]); }else{ lcd_locate(0,2); lcd_str(menu_txt[flag_menu]); lcd_locate(1,2); lcd_str(menu_txt[flag_menu+1]); } } |
Taki zabieg pozwoli nam przewijać menu w obie strony tak jakby były one w pętli bezpośrednio za sobą.
Myślę że początkujące osoby mają wiele problemu z wymyśleniem sposobu przewijania menu w pętli w obie strony.