Жидкокристаллический дисплей (lcd) 1602 и arduino

Подключение LCD 1602A к Arduino (4-битном режиме)

Необходимые детали:
► Arduino UNO R3 x 1 шт.
► LCD-дисплей 1602A (2×16, 5V, Синий) x 1 шт.
► Провод DuPont, 2,54 мм, 20 см, F-F (Female — Female) x 1 шт.
► Потенциометр 10 кОм x 1 шт.
► Разъем PLS-16 x 1 шт.
► Макетная плата MB-102 x 1 шт.
► Кабель USB 2.0 A-B x 1 шт.

Подключение:
Для подключения будем использовать макетную плату, схема и таблица подключение LCD1602a к Arduino в 4-битном режиме можно посмотреть на рисунке ниже.

Подключение дисплея к макетной плате будет осуществляться через штыревые контакты PLS-16 (их необходимо припаять к дисплею). Установим модуль дисплея в плату breadboard и подключим питание VDD (2-й контакт) к 5В (Arduino) и VSS (1-й контакт) к GND (Arduino), далее RS (4-й контакт) подключаем к цифровому контакту 8 (Arduino). RW (5-й контакт) заземляем, подключив его к GND (Arduino), затем подключить вывод E  к контакту 8 (Arduino). Для 4-разрядного подключения необходимо четыре контакта (DB4 до DB7). Подключаем контакты DB4 (11-й контакт), DB5 (12-й контакт), DB6 (13-й контакт) и DB7 (14-й контакт) с цифровыми выводами Arduino 4, 5, 6 и 7. Потенциометр 10K используется для регулировки контрастности дисплея, схема подключения LCD дисплея 1602а, показана ниже

Библиотека уже входит в среду разработки IDE Arduino и нет необходимости ее устанавливать. Скопируйте и вставьте этот пример кода в окно программы IDE Arduino и загрузите в контроллер.

/*
Тестирование производилось на Arduino IDE 1.6.11
Дата тестирования 20.09.2016г.
*/

#include <LiquidCrystal.h>

LiquidCrystal lcd(7, 6, 5, 4, 3, 2);

void setup()
{
lcd.begin(16, 2); // Инициализирует LCD 16×2
}

void loop()
{
lcd.setCursor(0,0); // Установить курсор на первыю строку
lcd.print(«Hello, world»); // Вывести текст
lcd.setCursor(0,1); // Установить курсор на вторую строку
lcd.print(«www.robotchip.ru»); // Вывести текст
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

/*
Тестирование производилось на Arduino IDE 1.6.11
Дата тестирования 20.09.2016г.
*/
 
#include <LiquidCrystal.h>
 

LiquidCrystal lcd(7,6,5,4,3,2);

voidsetup()

{

lcd.begin(16,2);// Инициализирует LCD 16×2

}
 

voidloop()

{

lcd.setCursor(,);// Установить курсор на первыю строку

lcd.print(«Hello, world»);// Вывести текст

lcd.setCursor(,1);// Установить курсор на вторую строку

lcd.print(«www.robotchip.ru»);// Вывести текст

}

Немного о программе.
Для облегчения связи между Arduino и LCD дисплеем, используется встроенный в библиотеке в IDE Arduino «LiquidCrystal.h« — которая написана для LCD дисплеев, использующих HD44780 (Hitachi) чипсет (или совместимые микросхемы). Эта библиотека может обрабатывать как 4 — битном режиме и 8 — битном режиме подключение LCD.

Ссылки  Документация к LCD1602A

Купить на Aliexpress  Контроллер Arduino UNO R3 на CH340G  Контроллер Arduino UNO R3 на Atmega16U2  Провода DuPont, 2,54 мм, 20 см  LCD-дисплей 1602A

Купить в Самаре и области  Контроллер Arduino UNO R3 на CH340G  Контроллер Arduino UNO R3 на Atmega16U2  Провода DuPont, 2,54 мм, 20 см  LCD-дисплей 1602A

Барометр на Ардуино своими руками

#include <Wire.h>
#include <SFE_BMP180.h>

SFE_BMP180 pressure; // создаем объект pressure
#define ALTITUDE 1655.0 // высота офиса SparkFun, штат Колорадо, в метрах

void setup(){
   Serial.begin(9600);  // запускаем монитор порта
   pressure.begin();     // запускаем датчик давления
}

void loop(){
   char status;
   double T,P,p0,a;

   // для точного измерения, следует знать высоту, на которой производятся замеры
   // в этом примере используется константа ALTITUDE
   Serial.println();
   Serial.print("provided altitude: ");
   Serial.print(ALTITUDE,0);
   Serial.println(" meters");
  
   // перед измерением давления, следует узнать температуру
   // если запрос успешен, то возвращается время ожидания в миллисекундах
   // если запрос на измерение температуры не успешен, то возвращается 0
   status = pressure.startTemperature();
   if (status != 0){
      delay(status);

      // результат измерения температуры сохраняется в переменной T
      status = pressure.getTemperature(T);
      if (status != 0){
         Serial.print("temperature: ");
         Serial.print(T,2);
         Serial.println(" deg C");

         // запускаем измерение давления
         // если запрос успешен, возвращается время ожидания в миллисекундах
         // если запрос на измерение давления не успешен, возвращается 0
         status = pressure.startPressure(3);
         if (status != 0){
            delay(status);

            status = pressure.getPressure(P,T);
            if (status != 0){
               Serial.print("absolute pressure: ");
               Serial.print(P,2);
               Serial.print(" mb, ");
               Serial.print(P*0.0295333727,2);
               Serial.println(" inHg");

              // датчик bmp180 возвращает абсолютное давление, которое зависит от высоты
              // параметры: P = абсолютное давление в мб, ALTITUDE = текущая высота в м.
              // результат: p0 = давление с компенсацией на уровне моря в мбар
              p0 = pressure.sealevel(P,ALTITUDE);
              Serial.print("relative (sea-level) pressure: ");
              Serial.print(p0,2);
              Serial.print(" mb, ");
              Serial.print(p0*0.0295333727,2);
              Serial.println(" inHg");
           }
        else Serial.println("error retrieving pressure measurement\n");
      }
      else Serial.println("error starting pressure measurement\n");
    }
    else Serial.println("error retrieving temperature measurement\n");
  }
  else Serial.println("error starting temperature measurement\n");

  delay(5000);
}

Пояснения к коду:

  1. чтобы убрать влияние высоты при измерении атмосферного давления, используйте функцию уровня моря и текущую высоту;
  2. скачать библиотеку SFE_BMP180.h для работы с датчиком атмосферного давления BMP180 Arduino можно на нашем сайте здесь.

Как подключить жк дисплей к Ардуино по I2C

Для этого занятия нам потребуется:

Жидкокристаллический дисплей 1602 с I2C модулем подключается к плате Ардуино всего 4 проводами — 2 провода данных и 2 провода питания. Подключение QAPASS 1602a к Arduino проводится стандартно для шины I2C: вывод SDA подключается к порту A4, вывод SCL – к порту A5. Питание LCD дисплея осуществляется от порта +5V. Смотрите подробнее схему подключения жк монитора 1602 на фото ниже.

После подключения LCD монитора к Ардуино через I2C вам потребуется установить библиотеку LiquidCrystal_I2C.h для работы с LCD дисплеем по интерфейсу I2C и библиотека Wire.h (имеется в стандартной программе Arduino IDE). Скачать рабочую библиотеку LiquidCrystal_I2C.h для LCD 1602 с модулем I2C можно на странице Библиотеки для Ардуино на нашем сайте по прямой ссылке с Google Drive.

Подключение платы LCD Shield к Arduino

Подключение шилда очень простое – нужно попасть ножками в соответствующие разъемы платы ардуино и аккуратно совместить их. Ничего дополнительно подсоединять или припаивать не надо. Нужно помнить и учитывать тот факт, что часть пинов зарезервированы для управления дисплеем и кнопками и не может быть использована для других нужд! Для удобства подключения дополнительного оборудования на плате выведены дополнительные разъемы 5В и GND к каждой контактной площадке аналоговых пинов. Это, безусловно, упрощает работу с датчиками. Также можно подключать цифровые устройства через свободные пины 0-3 и 11-13. Подключив шилд, мы можем работать с экраном и кнопками на нем так же, как с отдельными устройствами, учитывая только номера пинов, к которым припаяны соответствующие контакты.

Как подключить LCD 1602 к Arduino

I2C — последовательная двухпроводная шина для связи интегральных схем внутри электронных приборов, известна, как I²C или IIC (англ. Inter-Integrated Circuit). I²C была разработана фирмой Philips в начале 1980-х годов, как простая 8-битная шина для внутренней связи между схемами в управляющей электронике (например, в компьютерах на материнских платах, в мобильных телефонах и т.д.).

В простой системе I²C может быть несколько ведомых устройств и одно ведущее устройство, которое инициирует передачу данных и синхронизирует сигнал. К линиям SDA (линия данных) и SCL (линия синхронизации) можно подключить несколько ведомых устройств. Часто ведущим устройством является контроллер Ардуино, а ведомыми устройствами: часы реального времени или LCD Display.

Распиновка 16х02 символов

Перед тем, приступить к сборке и написанию кода, давайте сначала взглянем на распиновку LCD 1602.

Профессиональный цифровой осциллограф
Количество каналов: 1, размер экрана: 2,4 дюйма, разрешен…

Подробнее

  • GND — должен быть подключен к земле Arduino.
  • VCC — это вывод питание для ЖК-дисплея, к которому мы подключаем 5-вольтовый контакт Arduino.
  • Vo (LCD Contrast) — вывод контролирует контрастность и яркость ЖК-дисплея. Используя простой делитель напряжения с потенциометром, мы можем точно отрегулировать контрастность.
  • RS (Register Select) — этот вывод позволяет Arduino сообщать ЖК-дисплею, отправляются команды или данные. В основном этот вывод используется для дифференциации команд от данных. Например, когда на выводе RS установлено значение LOW, мы отправляем команды на ЖК-дисплей (например, установить курсор в определенном месте, очистить дисплей, сдвинуть дисплей вправо и т. д.). Когда вывод RS установлено значение  HIGH, мы отправляем данные/символы на ЖК-дисплей.
  • R/W (Read/Write) — вывод предназначен для контроля того, что необходимо сделать — считать данные или передать их на ЖК-дисплй. Поскольку мы просто используем этот ЖК-дисплей в качестве устройства вывода, то достаточно на этот вывод подать HIGH уровень, тем самым мы перейдем в режим записи.
  • EN (Enable) — вывод используется для включения дисплея. Это означает, что когда на этом выводе  установлено значение LOW ЖК-дисплей не реагирует на то, что происходит с R/W, RS и линиями шины данных. Когда же на этом выводе HIGH ЖК-дисплей обрабатывает входящие данные.
  • D0-D7 (Data Bus) — это выводы, по которым передаются 8-битные данные на дисплей. Например, если мы хотим отобразить символ «A» в верхнем регистре, мы отправляем на LCD дисплей 0100 0001 (в соответствии с таблицей ASCII) .
  • AK (Anode & Cathode) используются для управления подсветкой LCD дисплея.

LCD 1602

Среди множества вариантов среди дисплеев отдельно хочется отметить именно дисплей LCD1602 на базе контроллера HD4478. Существует этот дисплей в двух цветах: белые буквы на синем фоне, черные буквы на желтом фоне. Подключение LCD 1602 к Arduino также не вызовет никаких проблем, так как есть встроенная библиотека, и ничего скачивать дополнительно не нужно. Дисплеи отличаются не только ценой, но и размером. Зачастую радиолюбителями используется 16 x 2, то есть 2 строки по 16 символов. Но существует также и 20 x 4, где 4 строки по 20 символов. Размеры и цвет не играют никакой роли в подключении дисплея lcd 1602 к Arduno, подключаются они одинаково. Угол обзора составляет 35 градусов, время отклика дисплея — 250 мс. Работать может при температурах от -20 до 70 градусов по Цельсию. При работе использует 4 мА на экран и на подсветку 120 мА.

Программа 2

Теперь будем выводить такую строку: “температура с момента запуска программы” -> “текущая температура”. Может быть полезным для исследования изменения температуры. Нам нужно завести переменную для хранения первого значения, назовём её . При запуске программы запросим температуру с датчика, подождём, запишем результат в переменную и будем выводить на дисплей как в предыдущем примере:

#include <LiquidCrystal_I2C.h>      // подключаем библу
LiquidCrystal_I2C lcd(0x27, 16, 2); // адрес, столбцов, строк

#include <microDS18B20.h>
MicroDS18B20<2> sensor;

float prevT;    // переменная для хранения температуры

void setup() {
  lcd.init();               // инициализация
  lcd.backlight();          // включить подсветку
  sensor.requestTemp();     // запрос температуры
  delay(1000);              // ждём
  prevT = sensor.getTemp(); // запомнили
}

void loop() {
  sensor.requestTemp(); // запрос температуры
  delay(1000);          // ждём
  
  lcd.home();           // курсор в 0,0
  lcd.print(prevT, 1);  // вывод prevT с точностью 1 знак
  lcd.write(223);       // градус
  lcd.print(' ');       // пробел
  lcd.write(126);       // стрелочка
  lcd.print(' ');       // пробел
  lcd.print(sensor.getTemp(), 1); // текущая температура
  lcd.write(223);       // градус
}

Также можно вывести время, прошедшее с момента запуска программы, например в формате часы:секунды.

  • У нас есть функция , которая возвращает время работы программы в миллисекундах.
  • даст нам секунды, запишем в переменную .
  • Чтобы получить количество секунд в пределах одной минуты, разделим секунды на 60:
  • Чтобы получить количество минут из общего количества секунд – нужно выполнить операцию остаток от деления, опять же на 60:
  • Чтобы выводить значения с ведущим нулём (например 03 вместо 3), сделаем простое условие:
  • Обернём вывод времени в функцию для лучшей читаемости кода
#include <LiquidCrystal_I2C.h>      // подключаем библу
LiquidCrystal_I2C lcd(0x27, 16, 2); // адрес, столбцов, строк

#include <microDS18B20.h>
MicroDS18B20<2> sensor;

float prevT;    // переменная для хранения температуры

void setup() {
  lcd.init();               // инициализация
  lcd.backlight();          // включить подсветку
  sensor.requestTemp();     // запрос температуры
  delay(1000);              // ждём
  prevT = sensor.getTemp(); // запомнили
}

void loop() {
  sensor.requestTemp(); // запрос температуры
  delay(1000);          // ждём
  
  lcd.home();           // курсор в 0,0
  lcd.print(prevT, 1);  // вывод prevT с точностью 1 знак
  lcd.write(223);       // градус
  lcd.print(' ');       // пробел
  lcd.write(126);       // стрелочка
  lcd.print(' ');       // пробел
  lcd.print(sensor.getTemp(), 1); // текущая температура
  lcd.write(223);       // градус
  
  printTime();          // выводим время
}

// функция вывода времени
void printTime() {
  lcd.setCursor(0, 1);          // курсор на вторую строку
  int sec = millis() / 1000;    // общее количество секунд  
  byte thisM = sec / 60;        // количество минут
  if (thisM < 10) lcd.print(0); // ведущий 0
  lcd.print(thisM);             // минуты
  lcd.print(':');               // двоеточие
  byte thisS = sec % 60;        // количество секунд
  if (thisS < 10) lcd.print(0); // ведущий 0
  lcd.print(thisS);             // секунды
}

Элементы платы

Дисплей

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

Экран выполнен на жидкокристаллической матрице, которая отображает 2 строки по 8 символов. Каждый символ состоит из отдельного знакоместа 5×8 пикселей.

Контроллер дисплея

Матрица индикатора подключена к встроенному чипу КБ1013ВГ6, который выполняет роль посредника между экраном и микроконтроллером.

Контроллер КБ1013ВГ6 аналогичен популярным чипам зарубежных производителей HD44780 и KS0066, что означает совместимость со всеми программными библиотеками.

Контакты подключения

На плате дисплея выведено 14 контактов для подведения питания и взаимодействия с управляющей электроникой.

Вывод Обозначение Описание
1 GND Общий вывод (земля)
2 VCC Напряжение питания (5 В)
3 VO Управление контрастностью
4 RS Выбор регистра
5 R/W Выбор режима записи или чтения
6 E Разрешение обращений к индикатору (а также строб данных)
7 DB0 Шина данных (8-ми битный режим)(младший бит в 8-ми битном режиме)
8 DB1 Шина данных (8-ми битный режим)
9 DB2 Шина данных (8-ми битный режим)
10 DB3 Шина данных (8-ми битный режим)
11 DB4 Шина данных (8-ми и 4-х битные режимы)(младший бит в 4-х битном режиме)
12 DB5 Шина данных (8-ми и 4-х битные режимы)
13 DB6 Шина данных (8-ми и 4-х битные режимы)
14 DB7 Шина данных (8-ми и 4-х битные режимы)

Дисплей может работать в двух режимах:

  • 8-битный режим — в нём используются и младшие и старшие биты (-)
  • 4-битный режим — в нём используются только младшие биты (-)

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

Включение подсветки

Фоновая подсветка дисплея — это отдельный контур, не связанный с остальным питание экрана. Для включения подсветки необходимо выполнить следующие действия:

  1. Установить перемычку на элемент на плате, что обеспечит подачу питания на анод подсветки через резистор.
  2. Установить перемычку на элемент на плате, что обеспечит подачу земли на катод подсветки.

Для создания перемычки достаточно капнуть припой на контактную площадку.

Барометр на Ардуино BMP180 LCD1602


Схема барометра на Ардуино Уно — bmp180 + lcd 1602

В следующем примере данные температуры и давления выводятся на текстовый экран (на дисплей не входит вся информация), при этом к шине i2c два устройства сразу подключено. Всего к шине i2c можно подключать до 127 устройств. Подключите к микроконтроллеру текстовый экран (согласно схеме, размещенной выше) и загрузите следующий пример программы для датчика давления GY-68 Arduino Uno.

#include <Wire.h>
#include <SFE_BMP180.h>

SFE_BMP180 pressure; // создаем объект pressure
#define ALTITUDE 1655.0 // высота офиса SparkFun, штат Колорадо, в метрах

#include <LiquidCrystal_I2C.h> // подключаем библиотеку для QAPASS 1602
LiquidCrystal_I2C LCD(0x27,16,2); // присваиваем имя LCD для дисплея

void setup(){
   pressure.begin();     // запускаем датчик давления
   LCD.init(); // инициализация LCD дисплея
   LCD.backlight(); // включение подсветки дисплея
}

void loop(){
   char status;
   double T,P,p0,a;
 
   // выводим значение температуры на дисплей
   status = pressure.startTemperature();
   if (status != 0){
      delay(status);

      status = pressure.getTemperature(T);
      if (status != 0){
         LCD.setCursor(0, 0);     // ставим курсор на 1 строку
         LCD.print("Temp: ");
         LCD.print(T,2);
         LCD.print(" *C");

         // выводим значение давления на дисплей
         status = pressure.startPressure(3);
         if (status != 0){
            delay(status);

            status = pressure.getPressure(P,T);
            if (status != 0){

              p0 = pressure.sealevel(P,ALTITUDE);
              LCD.setCursor(0, 1);     // ставим курсор на 2 строку
              LCD.print("Pres: ");
              LCD.print(p0,2);
              LCD.print(" mb, ");
           }
        else Serial.println("error retrieving pressure measurement\n");
      }
      else Serial.println("error starting pressure measurement\n");
    }
    else Serial.println("error retrieving temperature measurement\n");
  }
  else Serial.println("error starting temperature measurement\n");

  delay(5000);
}

Пояснения к коду:

  1. изменив программу, вы можете выводить на экран не значение температуры, а абсолютное и относительное атмосферное давление;
  2. при изменении температуры воздуха, происходит корректировка давления.

Описание протокола I2C

Прежде чем обсуждать подключение дисплея к ардуино через i2c-переходник, давайте вкратце поговорим о самом протоколе i2C.

I2C / IIC(Inter-Integrated Circuit) – это протокол, изначально создававшийся для связи интегральных микросхем внутри электронного устройства. Разработка принадлежит фирме Philips. В основе i2c протокола является использование 8-битной шины, которая нужна для связи блоков в управляющей электронике, и системе адресации, благодаря которой можно общаться по одним и тем же проводам с несколькими устройствами. Мы просто передаем данные то одному, то другому устройству, добавляя к пакетам данных идентификатор нужного элемента.

Самая простая схема I2C может содержать одно ведущее устройство (чаще всего это микроконтроллер Ардуино) и несколько ведомых (например, дисплей LCD). Каждое устройство имеет адрес в диапазоне от 7 до 127. Двух устройств с одинаковым адресом в одной схеме быть не должно.

Плата Arduino поддерживает i2c на аппаратном уровне. Вы можете использовать пины A4 и A5 для подключения устройств по данному протоколу.

В работе I2C можно выделить несколько преимуществ:

  • Для работы требуется всего 2 линии – SDA (линия данных) и SCL (линия синхронизации).
  • Подключение большого количества ведущих приборов.
  • Уменьшение времени разработки.
  • Для управления всем набором устройств требуется только один микроконтроллер.
  • Возможное число подключаемых микросхем к одной шине ограничивается только предельной емкостью.
  • Высокая степень сохранности данных из-за специального фильтра подавляющего всплески, встроенного в схемы.
  • Простая процедура диагностики возникающих сбоев, быстрая отладка неисправностей.
  • Шина уже интегрирована в саму Arduino, поэтому не нужно разрабатывать дополнительно шинный интерфейс.
  • Существует емкостное ограничение на линии – 400 пФ.
  • Трудное программирование контроллера I2C, если на шине имеется несколько различных устройств.
  • При большом количестве устройств возникает трудности локализации сбоя, если одно из них ошибочно устанавливает состояние низкого уровня.

PCF8574 — I2C модуль для LCD на базе HD44780

Микросхема PCF8574/PCF8574T обеспечивает расширение портов ввода/вывода для контроллеров через интерфейс I2C и позволит легко решить проблему нехватки цифровых портов. При использовании модуля как расширитель портов ввода/вывода следует учитывать то, что вывод Р3 имеет инверсный выход с открытым коллектором.

Микросхема может использоваться для управления ЖК дисплеем под управлением контроллера HD44780, в 4-х битном режиме. Для этой цели на плате установлена микросхема PCF8574, которая является преобразователем шины I2C в параллельный 8 битный порт.

Плата модуля разведена таким образом, чтобы ее можно было сразу подключить к ЖКИ. На вход подается питание и линии I2C. На плате сразу установлены подтягивающие резисторы на линиях SCL и SDA, потенциометр для регулировки контрастности и питание самого дисплея. Джампер справа включает/отключает подсветку.

Датчик температуры DS18B20

DS18B20 — это цифровой температурный датчик с интерфейсом 1-Wire от Maxim IC. На выходе мы получаем информацию в Цельсиях с точностью от 9 до 12 бит, от -55 до 125 (+/- 0,5). Каждый датчик имеет уникальный 64-разрядный серийный номер, что позволяет использовать огромное количество датчиков на одной шине данных.

Характеристики DS18B20

  • диапазон измеряемой температуры: −55… 125 °C
  • напряжение питания: от 3 В до 5,5 В
  • точность: ±0,5°C (в пределах −10… 85 °C)
  • потребляемый ток при опросе: 1 мА

Для работы с датчиком можно пользоваться библиотекой OneWhire, но для упрощения работы с датчиком предлагается использовать библиотеку DS18B20, которая существенно упрощает работу с датчиками данного типа.

внешний вид датчика температуры

Скачать стандартные библиотеки Arduino IDE на русском

Библиотеки для Ардуино делятся на две группы — стандартные и пользовательские. При установке Arduino IDE в папке Program Files\Arduino\libraries имеется набор стандартных библиотек для базовых функций видов, коммуникации платы и для подключения устройств: сервомоторов, шаговых двигателей, LCD-дисплеев и т.д. Стандартные библиотеки скачать можно на официальном сайте www.arduino.cc.

Список стандартных библиотек Arduino:

EEPROM — чтение и запись в энергонезависимую память (скачать eeprom.h)Ethernet — связь с Интернет с помощью Ethernet Shield (скачать ethernet.h)Firmata — для взаимодействия Arduino и ПК (скачать firmata.h)GSM — коммуникация по GSM/GRPS протоколу для GSM Shield (скачать gsm.h)LiquidCrystal — управление LCD дисплеем (скачать liquidcrystal.h)SD — чтение и запись в SD карту (скачать sd.h)Servo — управление серво двигателем (скачать servo.h)SPI — для взаимодействия Arduino и периферийных устройств (скачать spi.h)SoftwareSerial — коммуникация по цифровому порту (скачать softwareserial.h)Stepper — управление шаговым двигателем (скачать stepper.h)TFT — вывод текста и картинок на TFT дисплее (скачать ethernet.h)WiFi — связь с Интернет с помощью WiFi Shield (скачать wifi.h)Wire — коммуникация по протоколу I2C (скачать wire.h)

Проблемы подключения i2c lcd дисплея

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

Во-первых, можно увеличить или уменьшить контрастность монитора. Часто символы просто не видны из-за режима контрастности и подсветки.

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

Другой часто встречающейся причиной отсутствия текста на экране может стать неправильный i2c адрес. Попробуйте сперва поменять в скетче адрес устройства с 0x27 0x20 или на 0x3F. У разных производителей могут быть зашиты разные адреса по умолчанию. Если и это не помогло, можете запустить скетч i2c сканера, который просматривает все подключенные устройства и определяет их адрес методом перебора. Пример скетча i2c сканера.

Если экран все еще останется нерабочим, попробуйте отпаять переходник и подключить LCD обычным образом.

Как добавить свой символ?

Проблемой этих дисплеев является то, что нет поддержки кириллицы и символов. Например, необходимо вам какой-нибудь символ загрузить в дисплей, чтобы он мог его отражать. Для этого дисплей позволяет создать до 7 своих символов. Представьте таблицу:

1
1
1 1 1
1
1 1 1
1
1

Если 0 — там ничего нет, если 1 — это закрашенный участок. В примере выше можно увидеть создание символа «улыбающийся смайл». На примере программы в Arduino это будет выглядеть следующим образом:

Как можно увидеть, была создана битовая маска такая же, как и таблица. После создания ее можно выводить как переменную в дисплей. Помните, что в памяти можно хранить лишь 7 символов. В принципе, этого и бывает достаточно. Например, если нужно показать символ градуса.

Общие сведения

Большую часть модуля занимает ЖК дисплей, марки LCD 1602 с синей подсветкой, передача данных осуществляется по 4-битному режиму, подробнее в этой статье. На нижней части расположены шесть кнопок, пять из-за которых используются для навигации и одна кнопка дублирует reset. В верхнем левом углу установлен потенциометр, необходимый для регулировки контрастности ЖК дисплея. Так как LCD keypad shield устанавливается на плату Arduino свеху и фактически занимает разъемы, на модуле расположены дополнительные отверстия, для впаивания проводов или разъемов (на отдельную колодку. выведен интерфейс ICSP).
Из принципиальной схемы, можно увидеть, что база транзистора отвечающая за подсведку модуля подключена к выводу 10 платы Arduino, следовательно, можно отключать ее.

Принцип работы кнопок  
Кнопки располагаются в удобном порядке — вверх, вниз, влево, вправо, и SELECT. Все кнопки подключены к одному аналоговому входу «A0» используя цепочку резисторов, которые выдают разное опорное напряжение для «А0» при нажатии любой кнопки. На рисунке показана часть принципиальной схема LCD keypad shield

Их принциписальной схемы видно, если кнопки не нажаты напряжение на «A0» через резистор R2 (2кОм) будет 5В. Другие резисторы не влияют на схему, а при чтении аналогового вывода «A0» будет параметр на верхнем приделе 1023 (или приблизительно). Теперь рассмотрим, что произойдет, если будет нажата кнопка «Вниз». На выводе «А0» будет напряжением, которое разделено между резистором R2 (2кОм) которое подтянуто к +5В и резисторами R3 (330ОМ) и R4 (620Ом) общий суммой 950Ом, которые пытаются тянуть его вниз к 0В. Напряжения на «A0» будет составлять порядка 1.61В, это означает, что если выполнить команду analogRead () на A0, будет возвращено значение около 306, что означает нажатие кнопки «Вниз»
Такой же принцип применим и для других кнопок, напряжением и значение analogRead (), можно посмотреть ниже:

Напряжением и значение analogRead► RIGNT: 0.00В: 0 — 8 bit; 0 — 10 bit
► UP: 0.71В: 36 — 8 bit; 145 — 10 bit
► DOWN: 1.61В: 82 — 8 bit; 306 — 10 bit
► LEFT: 2.47В: 126 — 8 bit; 505 — 10 bit
► SELECT: 3.62В: 185 — 8 bit; 741 — 10 bit

Это позволяет сэкономить целый набор выводов и использовать их для более нужного использования. Принципиальная схема LCD keypad shield, показана на рисунке ниже.

Назначение выводов► A0: Вывод кнопок
► D4: LCD — DB4
► D5: LCD — DB5
► D6: LCD — DB6
► D7: LCD — DB7
► D8: LCD – RS
► D9: LCD Enable
► D10: LCD – отключение подсветки дисплея