vytvoření menu pomoci knihovny MENUSYSTEM - 1

27. září 2014 | 21.45 |
blog › 
Arduino › 
vytvoření menu pomoci knihovny MENUSYSTEM - 1

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("*");
}

Zpět na hlavní stranu blogu

Komentáře

 zatím nebyl vložen žádný komentář