Potřeboval jsem udělat jednoduché menu pro Dinduino a během hledání jsem narazil na knihovnu MENUSYSTEM z webové stránky : github.com/jonblack/arduino-menusystem
Nejen, že má jednoduché vytváření menu pomocí pár příkazů, ale hlavně jako jedna z mála knihoven umí periodicky zobrazit menu. To je důležité pro zobrazení aktuálních dat (čas, teplota, ...).
Tady je příklad je jednoduchého menu s podrobnějšícm komentářem:
#include <MenuSystem.h> // promenne pro menu MenuSystem ms; // instance objektu ms Menu mm(""); // nazev menu (root) MenuItem mm_mi1("Item 1"); // 1.polozka MenuItem mm_mi2("Item 2"); // 2.polozka MenuItem mm_mi3("Item 3"); // 3.polozka // nastavene funkce pro vyber polozky // nutne nasatvit pred udani struktury menu //----------------------------------------- // co se provede pri vyberu 1. polozky void on_item1_selected(MenuItem* p_menu_item) { Serial.println("Item1 Selected"); } // co se provede pri vyberu 2. polozky void on_item2_selected(MenuItem* p_menu_item) { Serial.println("Item2 Selected"); } // co se provede pri vyberu 3. polozky void on_item3_selected(MenuItem* p_menu_item) { Serial.println("Item3 Selected"); } // uvodni nastaveni void setup() { Serial.begin(9600); // nastaveni struktury menu // add.item pridava dalsi polozku do menu (nazev polozky menu, & + jmeno volane funkce pri vyberu) mm.add_item(&mm_mi1, &on_item1_selected); mm.add_item(&mm_mi2, &on_item2_selected); mm.add_item(&mm_mi3, &on_item3_selected); ms.set_root_menu(&mm); // zobraz napovedu help(); } // nekonecna smycka programu void loop() { // volani funkce pro pohyb v menu ovladani(); // zobrazeni menu Menu const* cp_menu = ms.get_current_menu(); Serial.println("----------------"); Serial.println(cp_menu->get_selected()->get_name()); Serial.println("----------------"); Serial.println(""); // Wait for two seconds so the output is viewable delay(2000); } void ovladani() { // resi pohyb po menu // aktualne z prikazoveho radku if (Serial.available()) { byte read = Serial.read(); switch (read) { case 'w': ms.prev(); break; // nahoru case 's': ms.next(); break; // dolu case 'a': ms.back(); break; // zpet - nepouzito case 'd': ms.select(); break; // vyber - nepouzito case 'h': help(); break; // napoveda } } } void help() { Serial.println("*"); Serial.println("* w - nahoru *"); Serial.println("* s - dolu *"); Serial.println("* a - zpet *"); Serial.println("* d - vyber *"); Serial.println("* h - napoveda *"); Serial.println("*"); } |