Съдържание:

Меню Arduino на LCD дисплей Nokia 5110 с помощта на въртящ се енкодер: 6 стъпки (със снимки)
Меню Arduino на LCD дисплей Nokia 5110 с помощта на въртящ се енкодер: 6 стъпки (със снимки)

Видео: Меню Arduino на LCD дисплей Nokia 5110 с помощта на въртящ се енкодер: 6 стъпки (със снимки)

Видео: Меню Arduino на LCD дисплей Nokia 5110 с помощта на въртящ се енкодер: 6 стъпки (със снимки)
Видео: #ArduBlock 2.0 - Wiki Учебник - LCD Дисплей - LCD Nokia 5110 2024, Ноември
Anonim
Image
Image
Меню Arduino на Nokia 5110 Lcd с помощта на въртящ се енкодер
Меню Arduino на Nokia 5110 Lcd с помощта на въртящ се енкодер

Скъпи приятели, добре дошли в друг урок! В това видео ще научим как да изградим собствено меню за популярния LCD дисплей Nokia 5110, за да направим нашите проекти по -удобни за потребителя и по -способни. Да започваме!

Това е проектът, който ще изградим. На дисплея се появява просто меню и с помощта на въртящия се енкодер мога да се придвижвам нагоре или надолу и да избера елемент от менюто, като натисна бутона на въртящия се енкодер. При натискане на средния бутон на въртящия се енкодер се появява друг екран и можем да променим стойността на променлива. Ако натиснем бутона на въртящия се енкодер още веднъж, се връщаме към екрана на главното меню. Менюто има 6 елемента и можем да превъртаме надолу или нагоре менюто и елементите на дисплея ще се променят съответно. Гледайте прикаченото видео, за да видите как точно работи това меню. Разбира се, можете да го промените, за да създадете свои собствени по -сложни менюта, ако желаете.

Нека сега да видим как да изградим този проект.

Стъпка 1: Вземете всички части

Вземете всички части
Вземете всички части

Частите, необходими за изграждането на този проект, са следните:

  • Arduino Uno ▶
  • LCD дисплей Nokia 5110 ▶
  • Ротационен енкодер ▶
  • Малка дъска ▶
  • Някои проводници ▶
  • Power Bank ▶

Цената на проекта е много ниска, по -малко от 10 долара. В описанието на видеото по -долу можете да намерите връзки за всички части, които използвам.

Стъпка 2: Nokia 5110 LCD дисплей

Image
Image
Изграждане на проекта
Изграждане на проекта

Nokia 5110 е любимият ми дисплей за моите Arduino проекти.

Nokia 5110 е основен графичен LCD екран, който първоначално е бил предназначен за екран на мобилен телефон. Той използва контролера PCD8544, който е CMOS LCD контролер/драйвер с ниска мощност. Поради това този дисплей има впечатляваща консумация на енергия. Той използва само 0,4 mA, когато е включен, но подсветката е деактивирана. Той използва по -малко от 0,06 mA, когато е в режим на заспиване! Това е една от причините да направя този дисплей мой любим. PCD8544 се свързва с микроконтролери чрез интерфейс на серийна шина. Това прави дисплея много лесен за използване с Arduino. Трябва само да свържете 8 проводника.

Подготвих подробен урок за това как да използвам LCD дисплея Nokia 5110 с Arduino. Прикачих този видеоклип в тази инструкция, той може да предостави полезна информация за дисплея, затова ви препоръчвам да го гледате внимателно. Цената на дисплея е около 4 долара.

Можете да го получите тук: ▶

Стъпка 3: Ротационен енкодер

Image
Image

Ротационен енкодер, наричан още валов енкодер, е електромеханично устройство, което преобразува ъгловото положение или движение на вал или ос в аналогов или цифров код. Ротационните енкодери се използват в много приложения, които изискват прецизно неограничено въртене на вала, включително промишлени контроли, роботика, фотографски обективи със специално предназначение, компютърни устройства за въвеждане (като оптомеханични мишки и тракболи), реометри с контролиран стрес и въртящи се радарни платформи.

Ротационният енкодер, който ще използваме в този проект, е много евтин енкодер. Той също има вграден бутон и за да работи, трябва само да свържем 5 проводника. Подготвих подробен урок за това как да използвам въртящ се енкодер. Можете да намерите този видеоклип прикачен тук.

Цената на този ротационен енкодер е много ниска. Струва около $ 1,5.

Можете да го получите тук ▶

Стъпка 4: Изграждане на проекта

Image
Image
Изграждане на проекта
Изграждане на проекта
Изграждане на проекта
Изграждане на проекта

Нека сега свържем всички части заедно. Преди да изградите този проект, ако в миналото не сте използвали въртящ се енкодер, ви препоръчвам да гледате урока, който съм подготвил за ротационни енкодери. Това ще ви помогне да разберете как работят въртящите се енкодери и ще придобиете известен опит с тях. Това видео е прикачено тук.

Поставих дисплея на малка дъска като тази. Нека първо свържем дисплея. Първият щифт на дисплея, който е нулиран, отива към цифров пин 3 на Arduino Uno, вторият щифт отива към цифров щифт 4, третият пин отива към цифров пин 5, четвъртият щифт към цифров пин 11 и петият щифт към цифров щифт 13. Следващият щифт е Vcc. Свързваме Vcc към положителната релса на макета, а положителната релса към платката към 3.3V изхода на Arduino. Следващият щифт е Backlight за дисплея. Тъй като искаме да го управляваме чрез софтуера, го свързваме към цифров пин 7. Последният извод е GND. Свързваме GND към отрицателната релса на макета и отрицателната релса на макета към Arduino GND.

Сега остава само да свържем въртящия се енкодер. Първият щифт е GND и го свързваме към отрицателната шина на макета. Следващият извод е Vcc и го свързваме към положителната релса на макета. Следващият щифт е SW и го свързваме с аналогов извод 2. Следващият извод се нарича DT и го свързваме с аналогов извод 1. Накрая щифтът CLK е свързан с аналогов извод 0. Можете да намерите схематичната диаграма на този проект в описанието на видеото по -долу.

Сега сме готови да задействаме проекта. Както можете да видите, проектът работи добре, а менюто работи според очакванията! Чудесно, нека сега да видим софтуера на проекта.

Стъпка 5: Кодът на проекта

Кодът на проекта
Кодът на проекта

В този проект използваме 4 библиотеки. Използваме две библиотеки за дисплея и две за ротационен енкодер.

  1. Adafruit GFX:
  2. Nokia 5110:
  3. Библиотека на енкодера:
  4. Библиотека на TimerOne:

Първо ще разгледаме функцията drawMenu. Тази функция отговаря за изчертаването на менюто на дисплея. Тази функция се извиква на всеки няколко милисекунди, така че ако има промяна в менюто, тази функция е отговорна за актуализирането на менюто на екрана.

int menuitem = 1; int frame = 1; int страница = 1; int lastMenuItem = 1;

Има и 3 много важни глобални променливи, променливата страница, променливата елемент от менюто и променливата рамка. Променливата страница запомня кой екран на потребителския интерфейс се показва на екрана. Така че, ако променливата на страницата е 1, ние сме в основния екран на потребителския интерфейс, а ако променливата е 2, ние сме в вторичния екран на потребителския интерфейс, където задаваме стойността на променлива. Елементът от менюто запомня избрания елемент от менюто. Така че, ако стойността му е 1, се избира първият елемент от менюто, така че функцията drawMenu трябва да нарисува този елемент от менюто като черен с бели букви. Ако елементът от менюто е 2, се избира вторият елемент от менюто и така нататък. Променливата на рамката запомня коя част от менюто се показва на екрана. Тъй като менюто, което сме създали, съдържа 6 елемента и можем да показваме само 3 от тях наведнъж, трябва да знаем кои елементи се показват на екрана. Променливата рамка ни казва точно това. Ако променливата на рамката има стойност 1, показваме първите три елемента от менюто, ако е 2, показваме елементи 2, 3, 4 и т.н.

Опитах се да направя кода възможно най -лесен за промяна, затова създадох някои глобални променливи, които съдържат имената на елементите от менюто. По този начин можете лесно да създавате свои собствени менюта, без да търсите в код.

String menuItem1 = "Контраст"; String menuItem2 = "Сила на звука"; Низ menuItem3 = "Език"; Низ menuItem4 = "Трудност"; Низ menuItem5 = "Светлина: ВКЛ."; Низ menuItem6 = "Нулиране";

булева подсветка = вярно;

int контраст = 60; int обем = 50;

Език на низовете [3] = {"EN", "ES", "EL"};

int selectedLanguage = 0;

Трудност на низовете [2] = {"EASY", "HARD"};

int selectedDifficulty = 0;

Първо инициализираме всички глобални променливи, които са необходими в кода. След това инициализираме дисплея. Във функцията цикъл първо извикваме функцията drawMenu, за да нарисуваме менюто на екрана. След това отчитаме стойността от въртящия се енкодер и проверяваме дали бутонът е натиснат. Например, ако сме на главния екран на потребителския интерфейс и е избран първият елемент от менюто, ако стойността от въртящия се енкодер се е увеличила, променливата на менюто се увеличава и в следващия цикъл функцията drawMenu ще нарисува втория елемент от менюто, както е избран. Ако сега натиснем бутона на въртящия се енкодер, отиваме на втората страница, където задаваме стойността на променливата. Отново с помощта на въртящ се енкодер можем да увеличим или намалим стойността на променливата. Ако натиснем бутона, се връщаме обратно към страницата на главното меню и променливата на страницата намалява.

Това е основната идея зад това меню. Следваме същата процедура за всички елементи и страници от менюто. Кодът е сложен, има над 400 реда. Изглежда сложно, но ако опитате сами, ще го разберете по -лесно и ще можете да го промените, разширите и използвате в собствените си проекти. Както винаги можете да намерите прикачения код тук.

Стъпка 6: Тестване на проекта

Тестване на проекта
Тестване на проекта

Ако заредим кода, можем да видим, че проектът работи според очакванията. Можем да се придвижваме в менюто нагоре и надолу с помощта на вала и можем да избираме всеки елемент от менюто, като натискаме бутона на въртящия се енкодер. Колко готино е това!

Сега, когато знаем как да изграждаме менюта за LCD дисплеите на Nokia 5110, можем да добавим още функции към нашите проекти и да ги направим по -лесни за употреба. Това просто меню, което създадохме днес, обаче може да бъде подобрено. Можем да използваме прекъсвания, вместо да проверяваме състоянията на бутоните през цялото време. По този начин можем да намалим консумацията на енергия на проекта и да направим кода по -чист. Скоро ще подготвя видео за прекъсвания, така че следете. Ще се радвам да чуя вашето мнение за този проект за меню. Смятате ли, че е полезно и планирате ли да използвате меню във всеки от вашите проекти. Моля, публикувайте вашите мисли и идеи по -долу, благодаря!

Препоръчано: