Всем привет. Интересуют примеры простых менюшек, которые можно использовать в своих проектах. Может есть уже ссылки на готовые, которые не очень сложны в понимании. Спасибо.
Если нужно меню без вложенных подменю, проще всего завести массив строк с названиями пунктов меню и переменную, которая будет хранить номер текущего пункта. Будет жрать минимум памяти. Еще проще уже не получится.
Нашел готовый код для менюшки (примерный). Как правильно задать диапазон при которых кнопки могут срабатывать ?? Код (Text): #include <MyMenu.h> #include <LiquidCrystal.h> LiquidCrystal lcd(A0, A3, 9, 10, 11, 12); #define NUM_ITEMS 32 //length of items array include submenu headers MItm items[NUM_ITEMS] = { MItm("SHOPPING LIST",0,0), //main header always 0,0 MItm("Fruits",1), //1 is target submenu index MItm("Veggies",2), MItm("Other",3), MItm("FRUITS LIST",1,0), //this is the submenu with index 1 (0 is previous menu index) MItm("Apple",50), // if there is no "50" submenu callback will run MItm("Orange",60), MItm("Banana",70), MItm("Pear",80), MItm(" <<BACK",0), //means "go to submenu with index 0" MItm("VEGGIES LIST",2,0), MItm("Tomato",90), MItm("Potato",100), MItm("Smth else",110), MItm(" <<BACK",0), MItm("Other",3,0), MItm("Meat",4), MItm("Fish",5), MItm(" <<BACK",0), MItm("MEAT",4,3), // notice that 3 in prev-index now not zero MItm("Chicken",6), MItm("Bacon",7), MItm("Beef",8), MItm("SHOW FISH",5), MItm(" <<BACK",3), MItm(" <<MAIN",0), MItm("FISH",5,3), MItm("Clownfish",9), MItm("Shark",10), MItm("SHOW MEAT",4), MItm(" <<BACK",3), MItm(" <<MAIN",0) }; Menu menu(items,NUM_ITEMS,&lcd,menuCallback); void setup() { //set button pins pinMode(42,INPUT); pinMode(44,INPUT); pinMode(46,INPUT); pinMode(48,INPUT); //initialize lcd lcd.begin(20,4); //show main menu on screen menu.goMain(); } void loop() { if(digitalRead(42) == HIGH){ menu.goBack(); delay(100); } if(digitalRead(44) == HIGH){ menu.goDown(); delay(100); } if(digitalRead(46) == HIGH){ menu.goUp(); delay(100); } if(digitalRead(48) == HIGH){ menu.goNext(); delay(100); } delay(100); } void menuCallback(int idx){ //do something according to index of item selected if(idx < 10){ lcd.clear(); lcd.setCursor(2,1); lcd.print("NO MEAT n FISH!"); delay(1000); }else if(idx == 10){ //selected "shark" int i=16; while(i >= 0){ lcd.clear(); lcd.setCursor(0,2); lcd.print("-^-^-^-^-^-^-^-^-^-^"); lcd.setCursor(i,1); lcd.print("/l"); delay(300); i--; } }else{ lcd.clear(); lcd.setCursor(2,2); lcd.print(String(idx)+" pressed"); delay(1000); } menu.goLast(); //return to last viewed menu } я если правильно понимаю, то надо сменить вот эти фразы if(digitalRead(44) == HIGH) на диапазон (цифры свои).
Эти "фразы" просто определяют пины, к которым подключены кнопки. Вы можете для начала определить необходимую структуру меню? Сколько уровней вложенности хотите?
Можно сделать и в одну строку. Разберитесь с логикой работы меню и проблем не будет, сможете подогнать под себя как угодно.
Вот еще библиотеки http://playground.arduino.cc/Code/Menu http://jonblack.org/posts/arduino-library-for-creating-a-menu-system/ https://github.com/jonblack/arduino-menusystem
Сморозил ) Wire.h не подгрузил ) Код (Text): что то неработает на LiquidCrystal_I2C гугл говорит менять надо библиотеку... библиотека - LiquidCrystal_I2C V1 http://www.dfrobot.com/image/data/DFR0154/LiquidCrystal_I2Cv1-1.rar IDE - 1.0.5 есть мысли ? C:\Program Files (x86)\Arduino\libraries\LiquidCrystal_I2C\LiquidCrystal_I2C.cpp: In member function 'void LiquidCrystal_I2C::init_priv()': C:\Program Files (x86)\Arduino\libraries\LiquidCrystal_I2C\LiquidCrystal_I2C.cpp:68: error: 'Wire' was not declared in this scope C:\Program Files (x86)\Arduino\libraries\LiquidCrystal_I2C\LiquidCrystal_I2C.cpp: In member function 'void LiquidCrystal_I2C::expanderWrite(uint8_t)': C:\Program Files (x86)\Arduino\libraries\LiquidCrystal_I2C\LiquidCrystal_I2C.cpp:260: error: 'Wire' was not declared in this scope