Библиотека для создания Меню на дисплеях

Тема в разделе "Глядите, что я сделал", создана пользователем DenisNP, 8 авг 2013.

  1. crazysova

    crazysova Нуб

    Пример скетча для LCD keypad Shield 1602. Работает на IDE 1.8.6
    Код (C++):
    #include <MyMenu.h>
    #include <LiquidCrystal.h>
    LiquidCrystal lcd(8, 9, 4, 5, 6, 7); //инициализация дисплея
    //Клавиотура
    #define BTN_UP   1
    #define BTN_DOWN 2
    #define BTN_LEFT 3
    #define BTN_RIGHT 4
    #define BTN_SELECT 5
    #define BTN_NONE 10

    #define NUM_ITEMS 11 //количество пунктов в меню включая все заголовки всех подменю
    void menuCallback(int);

    MItm items[NUM_ITEMS] = {
      MItm("SETTING", 0, 0), //этот пункт является заголовком подменю с индексом 0 (то есть главного меню)
      MItm("SETTING DATE", 1), //пункт главного меню, который при выборе переходит на подменю с индексом 1
      MItm("SETTING OTHER", 2),
      MItm("SETTING DATE", 1, 0),
      MItm("DATE", 50),
      MItm("MOUTH", 60),
      MItm("YEAR", 70),
      MItm("DAY OF WEEK", 80),
      MItm("SETTING OTHER", 2, 0),
      MItm("ALGORITHM", 90),
      MItm("PERIOD", 100)
    };

    Menu menu(items, NUM_ITEMS, &lcd, menuCallback, 2, ">");//так создается меню (подробнее ниже)

    void setup() {
      //запускаем экран
      lcd.begin(16, 2);

      //отображаем на экране главное меню
      menu.goMain();
    }

    void menuCallback(int idx) {
      //эта функция будет вызвана, если подменю с индексом idx нет
      //и нужно совершить действие, а не уходить на еще один уровень в меню

      if (idx < 10) { //если idx < 10 делаем одно
        lcd.clear();
        lcd.setCursor(2, 1);
        lcd.print("no action");
        delay(1000);
      } else if (idx == 10) { //если выбран пункт "акула" делаем другое :)
        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(); //после некоторой паузы вот этой функцией возвращаемся на последнее показанное меню
    }

    void loop() {
      int button = detectButton();
      switch (button) {
        case BTN_UP:
          menu.goUp();
          break;
        case BTN_DOWN:
          menu.goDown();
          break;
        case BTN_LEFT:
          menu.goBack();
          break;
        case BTN_RIGHT:
          menu.goNext();
          break;
        case BTN_SELECT:
          menu.goNext();
          break;
        default:
          //printDisplay("Press any key");
          break;
      }
    }

    int detectButton() {
      int keyAnalog =  analogRead(A0);
      delay(200);
      if (keyAnalog < 100) {
        // Значение меньше 100 – нажата кнопка right
        return BTN_RIGHT;
      } else if (keyAnalog < 200) {
        // Значение больше 100 (иначе мы бы вошли в предыдущий блок результата сравнения, но меньше 200 – нажата кнопка UP
        return BTN_UP;
      } else if (keyAnalog < 400) {
        // Значение больше 200, но меньше 400 – нажата кнопка DOWN
        return BTN_DOWN;
      } else if (keyAnalog < 600) {
        // Значение больше 400, но меньше 600 – нажата кнопка LEFT
        return BTN_LEFT;
      } else if (keyAnalog < 800) {
        // Значение больше 600, но меньше 800 – нажата кнопка SELECT
        return BTN_SELECT;
      } else {
        // Все остальные значения (до 1023) будут означать, что нажатий не было
        return BTN_NONE;
      }
    }

     
     
  2. ShMishgan

    ShMishgan Нерд

    Пожалуйста, помогите.
    Перехожу по ссылке в первом посте, для скачивания библиотеки. Список файловесть, но в упор не вижу кнопки скачать.
    Ткните носом новичка.
     
    Последнее редактирование: 12 дек 2018
    Svyatslav нравится это.
  3. Vovka

    Vovka Гик

    "прыгаем вверх по дереву" - в итоге: https://github.com/DenisNP/Arduino
     
    ShMishgan и Svyatslav нравится это.
  4. ShMishgan

    ShMishgan Нерд

    Благодарю вас! Всё получилось.
     
    Svyatslav нравится это.
  5. Ракета

    Ракета Нуб

    спс за библиотеку