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

 


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, дисплеи




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

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

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