Мобільна версія Форум Arduino Документація Гарантійні умови 0 0
UA RU
Графік роботи магазину:
Пн-Пт: 8.00 - 19.00
Сб: 10.00 - 17.00
Нд: вихідний
Каталог
Напиши статтю і отримай знижку!

"Создание меню на LCD дисплее"

2016-03-11

Всі статті →

В одной из своих прошлых статей я рассказывал о своем многоуровневом меню. Кстати вот эта статья

Так вот, думаю многим не понятно, как создать такое меню. Сейчас я Вам все расскажу. Будет много писанины. Ну что, поехали?

Первым делом нам необходимо подключить библиотеку для вашего дисплея, создать его и провести инициализацию. Для дисплея 16x2 это будет выглядеть так:

  1. Библиотека стандартная, есть во всех версиях среды. #include <LiquidCrystal.h>
  2. Создание дисплея выглядит так: LiquidCrystal lcd(RS, E, D4, D5, D6, D7);
  3. Инициализация происходит в Setup и выглядит так: lcd.begin(16, 2);

Далее нам необходима переменная, которая будет хранить страницу меню. Выглядит это так:

int MenuPos = 0;

Нам нужны кнопки, которыми мы будем "листать" наше меню. Давайте подключим их к 10 и 11 пину. Необходимо также подключить подтягивающий резистор на землю, чтобы в покое на Arduino был 0. Если этого не сделать, то меню будет "жить" своей жизнью.

В скетче подключение кнопок выглядит так:

int MenuPlus = 10; int MenuMinus = 11;

В Setup нужно записать такие строки:

pinMode(10, INPUT); pinMode(11, INPUT);

При написании любых скетчей важно знать синтаксис программирования!

В Loop напишем следующее:

if(digitalRead(10) == HIGH)

{

MenuPos++;

}

if(digitalRead(11) == HIGH)

{

MenuPos--;

}

Мы написали несколько операторов if, которые делают следующее: Они проверяют состояние пинов, и если кнопка нажата, то есть на пине высокий уровень, то увеличивает переменную на 1. Аналогично и со вторым оператором, только там отнимается.

Напишем еще один оператор, который ограничивает кол-во страниц.

if(MenuPos > 1)

{

MenuPos=0;

}

Этот оператор проверяет переменную меню, и если она больше 1, то сбрасывает ее в 0.

То есть теперь Мы имеем 2 страницы.

Теперь давайте начнем отображение страниц на дисплее.

В Loop напишем еще один оператор.

if(MenuPos == 0)

{

lcd.clear();

lcd.print("Menu Page 1");

}

else if(MenuPos == 1)

{

lcd.clear();

lcd.print("Menu Page 2)";

}

Он проверяет какое значение имеет переменная меню, и в зависимости от ее отображает ту или иную информацию, в нашем случае показывает какая страница меню.

Теперь давайте попробуем изменить значение переменной на одной из страниц меню.

Для этого создайте еще одну переменную, например MenuPerem

Также нужно подключить хотя бы одну кнопку для управления переменной.

Подключим ее к 12 пину.

После создаем еще один оператор:

if(MenuPos == 0 && digitalWrite(12) == HIGH)

{

MenuPerem++;

}

То есть, если 1 страница меню, и нажата кнопка, то увеличиваем переменную.

Вот краткая инструкция по созданию своего меню для дисплея.

Всем спасибо за внимание, до скорой встречи!

Ваша оцінка статті:

Відмінно
Добре
Задовільно
Погано
Дуже погано

Загальна оцінка:

Оцінка " "Создание меню на LCD дисплее""
4 з 5
зроблена на основі 16 оцінок 16 клієнтських відгуків.

Дякуємо Вам за звернення! Ваш відгук з'явиться після модерації адміністратором.
че
10.03.2022 11:05:18
Ну и меню...Это уроки для школьников 2 класса?
Евгений
07.12.2020 09:12:49
надо ещё delay добавить, чтоб не моргал экран, иуничтожить дребезг контактов.
Farif
24.05.2020 08:34:28
вместо digitalWrite надо digitalReadif(MenuPos == 0
Владимир
07.02.2020 00:40:54
Спасибо всё доходчиво. как для новичка.
Владимир
20.01.2020 13:00:44
Спасибо, огромное...
Андрей
30.08.2019 11:27:29
здесь небольшая ошибка lcd.print("Menu Page 2)";
Алексей
24.08.2019 01:24:24
В примере показа меню, в 9 строке ошибка. Не lcd.print("Menu Page 2)"; а "lcd.print("Menu Page 2");" (кавычки за скобками, а не перед)
iliia
05.12.2018 19:14:42
vce ok
ivan rusev
28.11.2018 21:24:04
простейшее меню
Сергей
25.10.2018 16:13:44
Спасибо, прочитал с удовольствием, но int действительно жирно
Алексей
16.06.2018 03:46:11
Кажется в коде ошибка, при листании меню вы выполняете команду с кнопки if(digitalRead(10) == HIGH), а с переменной if(MenuPos == 0
Жан
24.05.2018 12:03:17
Автору спасибо!
Юрий
08.05.2018 04:20:37
int не жирно будет. Может Вам памяти не жалко, byte вполне достаточно.
Mr. Alex
26.03.2018 15:39:18
3
Ген
25.01.2018 19:41:47
2
Владислав
24.12.2017 00:39:03
1
оплата картами Visa і MasterCard