цифровая электроника
вычислительная техника
встраиваемые системы

 

Arduino и дисплей Nokia 5110 с организацией интерфейсного меню

Автор: Mike(admin) от 13-05-2019, 02:55

Для взаимодействия электроники с пользователем зачастую используются какие-либо индикаторы и кнопки. Дисплеи на сегодняшний день являются одними из удобных и эффективных индикаторов информации.


В сегодняшнем уроке мы рассмотрим подключение дисплея Nokia 5110 и Arduino, а также организуем простое меню с управлением с помощью кнопок. Меню является одним из самых простых и интуитивно понятных способов взаимодействия пользователей с продуктами, требующими навигации.


Nokia 5110 LCD – один из самых популярных среди ЖК-дисплеев. Первоначально он был разработан для использования в качестве экрана для мобильных телефонов и применялся во многих мобильных телефонах в течение 90-х годов. Дисплей использует контроллер/драйвер с низким энергопотреблением PCD8544, который управляет графическим дисплеем размером 84 × 48 пикселей. В нормальном состоянии дисплей потребляет около 6-7 мА, что делает его идеальным для устройств с низким энергопотреблением.


Nokia 5110

Чтобы продемонстрировать, как организовать меню на дисплее с Arduino, мы создадим простое демонстрационное меню с тремя страницами. Для навигации по меню мы будем использовать 3 кнопки. Первая – для прокрутки вверх, вторая – для прокрутки вниз, а третья – для выбора выделенного параметра. Первый экран / страница меню будет служить домашней страницей и будет содержать параметры, которые открывают следующие два экрана / страницы. Вторая страница откроется после выбора первого пункта меню на главной странице. Пользователи смогут изменять контрастность дисплея с помощью кнопок «вверх» и «вниз» для увеличения или уменьшения соответственно. Нажав кнопку выбора, пользователи смогут вернуться на домашнюю страницу. Вторая опция на главной странице отображает третью страницу, где пользователи смогут включать и выключать подсветку дисплея, нажимая кнопку выбора элемента.


Arduino и дисплей Nokia 5110 с организацией интерфейсного меню

Выбор последней опции на домашней странице делает сброс, то есть она очищает все предыдущие настройки контрастности и подсветки. Это забавный и интересный проект, который может быть очень полезен для всех, независимо от технического уровня.


Схема подключения для этого проекта довольно проста, подключите компоненты, как показано на приведенной схеме.


Arduino и дисплей Nokia 5110 с организацией интерфейсного меню

Посмотрев на схему, вы увидите, что кнопки подключены к Arduino без общих подтягивающих резисторов. Это потому, что мы будем использовать внутренний подтягивающий резистор Arduino.


После того, как все соединения будут сделаны, мы можем перейти к коду проекта. Этот код сильно зависит от двух основных библиотек. Здесь используются библиотека Adafruit GFX и библиотека Adafruit Nokia 5110 LCD. Библиотека Adafruit GFX, вероятно, является одной из библиотек, которые мы чаще всего применяем в наших руководствах. Она позволяет легко отображать графику и выполнять простые анимации на поддерживаемых дисплеях. Библиотека Nokia 5110 LCD, с другой стороны, сокращает объем работы и код, необходимый для взаимодействия с ЖК-дисплеем Nokia 5110. Весь код программы проекта выглядит следующим образом.



#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
boolean backlight = true;
int contrast=50;
int menuitem = 1;
int page = 1;
volatile boolean up = false;
volatile boolean down = false;
volatile boolean middle = false;
int downButtonState = 0;
int upButtonState = 0;  
int selectButtonState = 0;          
int lastDownButtonState = 0;
int lastSelectButtonState = 0;
int lastUpButtonState = 0;
Adafruit_PCD8544 display = Adafruit_PCD8544( 5, 4, 3);
void setup() {
  pinMode(2, INPUT_PULLUP);
  pinMode(1, INPUT_PULLUP);
  pinMode(0, INPUT_PULLUP);
  pinMode(7,OUTPUT);
  digitalWrite(7,LOW);
  
  Serial.begin(9600);
  
  display.begin();      
  display.setContrast(contrast);
  display.clearDisplay(); 
  display.display();   
}
void loop() {
  
  drawMenu();
  downButtonState = digitalRead(2);
  selectButtonState = digitalRead(1);
  upButtonState =   digitalRead(0);
 
  checkIfDownButtonIsPressed();
  checkIfUpButtonIsPressed();
  checkIfSelectButtonIsPressed();
  if (up && page == 1 ) {
    up = false;
    menuitem--;
    if (menuitem==0)
    {
      menuitem=3;
    }      
  }else if (up && page == 2 ) {
    up = false;
    contrast--;
    setContrast();
  }
  if (down && page == 1) {
    down = false;
    menuitem++;
    if (menuitem==4) 
    {
      menuitem=1;
    }      
  }else if (down && page == 2 ) {
    down = false;
    contrast++;
    setContrast();
  }
  if (middle) {
    middle = false;
    
    if (page == 1 && menuitem==2) 
    {
      if (backlight) 
      {
        backlight = false;
        turnBacklightOff();
        }
      else 
      {
        backlight = true; 
        turnBacklightOn();
       }
    }
    if(page == 1 && menuitem ==3)
    {
      resetDefaults();
    }
else if (page == 1 && menuitem==1) {
      page=2;
     }
else if (page == 2) {
      page=1;
     }
   }
   
  }
  void checkIfDownButtonIsPressed()
  {
    if (downButtonState != lastDownButtonState) 
  {
    if (downButtonState == 0) 
    {
      down=true;
    }
    delay(50);
  }
   lastDownButtonState = downButtonState;
  }
void checkIfUpButtonIsPressed()
{
  if (upButtonState != lastUpButtonState) 
  {
    if (upButtonState == 0) {
      up=true;
    }
    delay(50);
  }
   lastUpButtonState = upButtonState;
}
void checkIfSelectButtonIsPressed()
{
   if (selectButtonState != lastSelectButtonState) 
  {
    if (selectButtonState == 0) {
      middle=true;
    }
    delay(50);
  }
   lastSelectButtonState = selectButtonState;
}
  
  void drawMenu()
  {
    
  if (page==1) 
  {    
    display.setTextSize(1);
    display.clearDisplay();
    display.setTextColor(BLACK, WHITE);
    display.setCursor(15, 0);
    display.print("MAIN MENU");
    display.drawFastHLine(0,10,83,BLACK);
    display.setCursor(0, 15);
   
    if (menuitem==1) 
    { 
      display.setTextColor(WHITE, BLACK);
    }
    else 
    {
      display.setTextColor(BLACK, WHITE);
    }
    display.print(">Contrast");
    display.setCursor(0, 25);
   
    if (menuitem==2) 
    {
      display.setTextColor(WHITE, BLACK);
    }
    else 
    {
      display.setTextColor(BLACK, WHITE);
    }    
    display.print(">Light: ");
    
    if (backlight) 
    {
      display.print("ON");
    }
    else 
    {
      display.print("OFF");
    }
    display.display();
    
    if (menuitem==3) 
    { 
      display.setTextColor(WHITE, BLACK);
    }
    else 
    {
      display.setTextColor(BLACK, WHITE);
    }  
    display.setCursor(0, 35);
    display.print(">Reset");
    display.display();
  }
    
 
  else if (page==2) 
  {
    
    display.setTextSize(1);
    display.clearDisplay();
    display.setTextColor(BLACK, WHITE);
    display.setCursor(15, 0);
    display.print("CONTRAST");
    display.drawFastHLine(0,10,83,BLACK);
    display.setCursor(5, 15);
    display.print("Value");
    display.setTextSize(2);
    display.setCursor(5, 25);
    display.print(contrast);
 
    display.setTextSize(2);
    display.display();
  }
  
  }
  void resetDefaults()
  {
    contrast = 50;
    setContrast();
    backlight = true;
    turnBacklightOn();
  }
  void setContrast()
  {
    display.setContrast(contrast);
    display.display();
  }
  void turnBacklightOn()
  {
    digitalWrite(7,LOW);
  }
    void turnBacklightOff()
  {
    digitalWrite(7,HIGH);
  }

Просмотрите схему еще раз, чтобы убедиться, что все подключено, как должно быть, затем подключите Arduino к компьютеру и загрузите код. Через пару секунд вы увидите меню, отображаемое на ЖК-дисплее, и оно должно реагировать на нажатия кнопок.


Arduino и дисплей Nokia 5110 с организацией интерфейсного меню



© digitrode.ru


Теги: Arduino, дисплеи



   Благодарим Вас за интерес к информационному проекту digitrode.ru.
   Если Вы хотите, чтобы интересные и полезные материалы выходили чаще, и было меньше рекламы,
   Вы можее поддержать наш проект, пожертвовав любую сумму на его развитие.


Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий