Примеры кодов простых меню

Тема в разделе "Arduino & Shields", создана пользователем Максим B, 2 июн 2014.

  1. Максим B

    Максим B Гуру

    Всем привет. Интересуют примеры простых менюшек, которые можно использовать в своих проектах. Может есть уже ссылки на готовые, которые не очень сложны в понимании. Спасибо.
     
  2. acos

    acos Официальный гик Администратор

  3. Megakoteyka

    Megakoteyka Оракул Модератор

    Если нужно меню без вложенных подменю, проще всего завести массив строк с названиями пунктов меню и переменную, которая будет хранить номер текущего пункта. Будет жрать минимум памяти. Еще проще уже не получится.
     
  4. Максим B

    Максим B Гуру

    Нашел готовый код для менюшки (примерный). Как правильно задать диапазон при которых кнопки могут срабатывать ??


    Код (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) на диапазон (цифры свои).
     
  5. Megakoteyka

    Megakoteyka Оракул Модератор

    Эти "фразы" просто определяют пины, к которым подключены кнопки.
    Вы можете для начала определить необходимую структуру меню? Сколько уровней вложенности хотите?
     
  6. ZaikaBlogs

    ZaikaBlogs Нерд

    Ого...
     
  7. ZaikaBlogs

    ZaikaBlogs Нерд

    Можно сделать под 16*2???
     
  8. Megakoteyka

    Megakoteyka Оракул Модератор

    Можно сделать и в одну строку. Разберитесь с логикой работы меню и проблем не будет, сможете подогнать под себя как угодно.
     
  9. ZaikaBlogs

    ZaikaBlogs Нерд

  10. difficult

    difficult Нуб

  11. ZaikaBlogs

    ZaikaBlogs Нерд

    СПССПС
     
  12. difficult

    difficult Нуб

    Сморозил ) 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
     
    Последнее редактирование: 12 авг 2014
  13. ZaikaBlogs

    ZaikaBlogs Нерд

    Wire не подходит:)