подскажите по созданию меню
- Войдите на сайт для отправки комментариев
Сб, 02/11/2013 - 21:30
Добрый день!.
Я пытаюсь разобраться в создании меню ,но т.к я только недавно начал программировать все продвигается с трудом.
Меню создаю с помощью библиотеки MenuBackend.h .Уже разобрался с структурой,переходами между частями меню,подключил кнопки с одного цифрового вида.
Но завис на таком моменте.Мне нужно чтобы при выборе пункта (например в примере Pin) появлялась цифра и нажатиями "вверх" "вниз" можно было бы регулировать значения,прибавляя или уменьшая их.
Я так полагаю это надо прописывать в пункте void menuChangeEvent(MenuChangeEvent changed) оператором if , но что-то у меня не получается.
ком не трудно могли бы вы помочь?
заранее благодарен за помощь.
Код примера внизу
#include <MenuBackend.h> /* This is the structure of the modelled menu Settings Pin Debug Options Delay (D) 100 ms 200 ms 300 ms 400 ms */ //this controls the menu backend and the event generation MenuBackend menu = MenuBackend(menuUseEvent,menuChangeEvent); //beneath is list of menu items needed to build the menu MenuItem settings = MenuItem("Settings"); MenuItem pin = MenuItem("Pin"); MenuItem debug = MenuItem("Debug"); MenuItem options = MenuItem("Options"); MenuItem setDelay = MenuItem("Delay",'D'); MenuItem d100 = MenuItem("100 ms"); MenuItem d200 = MenuItem("200 ms"); MenuItem d300 = MenuItem("300 ms"); MenuItem d400 = MenuItem("400 ms"); //this function builds the menu and connects the correct items together void menuSetup() { Serial.println("Setting up menu..."); //add the file menu to the menu root menu.getRoot().add(settings); //setup the settings menu item settings.addRight(pin); //we want looping both up and down pin.addBefore(debug); pin.addAfter(debug); debug.addAfter(pin); //we want a left movement to pint to settings from anywhere debug.addLeft(settings); pin.addLeft(settings); settings.addBefore(options); settings.addAfter(options); options.addRight(setDelay); setDelay.addLeft(options); setDelay.addRight(d100); d100.addBefore(d100); //loop to d400 d100.addAfter(d200); d200.addAfter(d300); d300.addAfter(d400); d400.addAfter(d100); //loop back to d100 //we want left to always be bak to delay d100.addLeft(setDelay); d200.addLeft(setDelay); d300.addLeft(setDelay); d400.addLeft(setDelay); options.addAfter(options); } /* This is an important function Here all use events are handled This is where you define a behaviour for a menu item */ void menuUseEvent(MenuUseEvent used) { Serial.print("Menu use "); Serial.println(used.item.getName()); if (used.item == setDelay) //comparison agains a known item { Serial.println("menuUseEvent found Dealy (D)"); } } /* This is an important function Here we get a notification whenever the user changes the menu That is, when the menu is navigated */ void menuChangeEvent(MenuChangeEvent changed) { Serial.print("Menu change "); Serial.print(changed.from.getName()); Serial.print(" "); Serial.println(changed.to.getName()); } void setup() { Serial.begin(9600); menuSetup(); Serial.println("Starting navigation:\r\nUp: w Down: s Left: a Right: d Use: e"); } void loop() { if (Serial.available()) { byte read = Serial.read(); switch (read) { case 'w': menu.moveUp(); break; case 's': menu.moveDown(); break; case 'd': menu.moveRight(); break; case 'a': menu.moveLeft(); break; case 'e': menu.use(); break; } } }
неужели никто не пользовался библиотекой MenuBackend.h?
неужели никто не пользовался библиотекой MenuBackend.h?
не, а что это такое? хоть примерно намекни, что бы возникло желание смотреть в ту сторону.
библиотека позволяющая построить структуру меню.
чтобы была возможность перелистывать пункты кнопками и быстро переходить в нужные разделы.
как-то так.
Думал,раз известная библиотека,может кто объяснит пару вопросов(((
по гуглу проскочил - народ проблемы решает
а, в чём преимущество перед самописным велосипедом - время экономит, память, прочее?
по гуглу проскочил - народ проблемы решает
а, в чём преимущество перед самописным велосипедом - время экономит, память, прочее?
ну как и все библиотеки данная упрощает написание программы и сокращает код.
По идее ,чтобы все заработало как я хочу надо в void menuUseEvent(MenuUseEvent used) написать что-то типа такого
if (used.item == Pin)
{ Serial.println (k);
if (used.item == Pin && MenuItem == moveUp)
k++;
if (used.item == Pin && MenuItem == moveDown)
k--;
}
но видимо я управление неправильно делаю