Подключение дисплеев lcd1602, lcd2402 и lcd1602 i2c к arduino
Содержание:
- Библиотеки для работы с i2c LCD дисплеем
- Пример кода (скетч) для дисплея “LCD2004” (интерфейс “I2C”) и Arduino:
- Общие сведения
- Модуль i2c для LCD 1602 Arduino
- Примеры работы для Espruino
- Программа для Arduino IDE – отображение надписи на дисплее 1602A
- Вывод информации:
- Выводы дисплея:
- Подключение DHT12 к Arduino и вывод на LCD1602
Библиотеки для работы с i2c LCD дисплеем
Для взаимодействие Arduino c LCD 1602 по шине I2C вам потребуются как минимум две библиотеки:
- Библиотека Wire.h для работы с I2C уже имеется в стандартной программе Arduino IDE.
- Библиотека LiquidCrystal_I2C.h, которая включает в себя большое разнообразие команд для управления монитором по шине I2C и позволяет сделать скетч проще и короче. Нужно дополнительно установить библиотеку После подключения дисплея нужно дополнительно установить библиотеку LiquidCrystal_I2C.h
После подключения к скетчу всех необходимых библиотек мы создаем объект и можем использовать все его функции. Для тестирования давайте загрузим следующий стандартный скетч из примера.
#include <Wire.h> #include <LiquidCrystal_I2C.h> // Подключение библиотеки //#include <LiquidCrystal_PCF8574.h> // Подключение альтернативной библиотеки LiquidCrystal_I2C lcd(0x27,16,2); // Указываем I2C адрес (наиболее распространенное значение), а также параметры экрана (в случае LCD 1602 - 2 строки по 16 символов в каждой //LiquidCrystal_PCF8574 lcd(0x27); // Вариант для библиотеки PCF8574 void setup() { lcd.init(); // Инициализация дисплея lcd.backlight(); // Подключение подсветки lcd.setCursor(0,0); // Установка курсора в начало первой строки lcd.print("Hello"); // Набор текста на первой строке lcd.setCursor(0,1); // Установка курсора в начало второй строки lcd.print("ArduinoMaster"); // Набор текста на второй строке } void loop() { }
Описание функций и методов библиотеки LiquidCrystal_I2C:
- home() и clear() – первая функция позволяет вернуть курсор в начало экрана, вторая тоже, но при этом удаляет все, что было на мониторе до этого.
- write(ch) – позволяет вывести одиночный символ ch на экран.
- cursor() и noCursor() – показывает/скрывает курсор на экране.
- blink() и noBlink() – курсор мигает/не мигает (если до этого было включено его отображение).
- display() и noDisplay() – позволяет подключить/отключить дисплей.
- scrollDisplayLeft() и scrollDisplayRight() – прокручивает экран на один знак влево/вправо.
- autoscroll() и noAutoscroll() – позволяет включить/выключить режим автопрокручивания. В этом режиме каждый новый символ записывается в одном и том же месте, вытесняя ранее написанное на экране.
- leftToRight() и rightToLeft() – Установка направление выводимого текста – слева направо или справа налево.
- createChar(ch, bitmap) – создает символ с кодом ch (0 – 7), используя массив битовых масок bitmap для создания черных и белых точек.
Альтернативная библиотека для работы с i2c дисплеем
В некоторых случаях при использовании указанной библиотеки с устройствами, оснащенными контроллерами PCF8574 могут возникать ошибки. В этом случае в качестве альтернативы можно предложить библиотеку LiquidCrystal_PCF8574.h. Она расширяет LiquidCrystal_I2C, поэтому проблем с ее использованием быть не должно.
Скачать библиотеку можно на нашем сайте. Библиотека также встроена в последние версии Arduino IDE.
Пример кода (скетч) для дисплея “LCD2004” (интерфейс “I2C”) и Arduino:
Пример скетча для 20 символьного 4 строкового дисплея
Arduino
#include <Wire.h>
// библиотека для LCD I2C:
// https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads
#include <LiquidCrystal_I2C.h>
// LCD адрес — 0x27 для 20 символьного 4 строкового дисплея
// назначение контактов на I2C LCD:
// addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // bl — backlight, blpol — полярность подсветки
void setup()
{
Serial.begin(9600); //
lcd.begin(20,4); // инициализация lcd 20 символьного 4 строкового дисплея, подсветка включена
delay(2000);
lcd.noBacklight(); // выключить подсветку
delay(2000);
lcd.backlight(); // включить подсветку
// нумерация позиции курсора для строки и символа начинается с 0
lcd.setCursor(0,0); // начало с символа 1 строка 1
lcd.print(«Char 1, Row 1»);
delay(1000);
lcd.setCursor(1,1); // начало с символа 2 строка 2
lcd.print(«Char 2, Row 2»);
delay(1000);
lcd.setCursor(2,2); // начало с символа 3 строка 3
lcd.print(«Char 3, Row 3»);
lcd.setCursor(3,3); // начало с символа 4 строка 4
delay(1000);
lcd.print(«Char 4, Row 4»);
delay(5000);
lcd.clear(); // очистка дисплея
lcd.setCursor(0,0);
lcd.print(«www.umnyjdomik.ru»);
lcd.setCursor(0,1);
lcd.print(«Start Serial Monitor»);
lcd.setCursor(0,2);
lcd.print(«Type chars on keyboard»);
}
void loop()
{
{
if (Serial.available()) {
delay(100); // задержка для получения всего сообщения
lcd.clear();
// чтение всех возможных символов
while (Serial.available() > 0) {
lcd.write(Serial.read()); // отображение каждого символа на дисплее LCD
}
}
}
}
1 |
#include <Wire.h> LiquidCrystal_I2Clcd(0x27,2,1,,4,5,6,7,3,POSITIVE);// bl — backlight, blpol — полярность подсветки voidsetup() { Serial.begin(9600);// lcd.begin(20,4);// инициализация lcd 20 символьного 4 строкового дисплея, подсветка включена delay(2000); lcd.noBacklight();// выключить подсветку delay(2000); lcd.backlight();// включить подсветку // нумерация позиции курсора для строки и символа начинается с 0 lcd.setCursor(,);// начало с символа 1 строка 1 lcd.print(«Char 1, Row 1»); delay(1000); lcd.setCursor(1,1);// начало с символа 2 строка 2 lcd.print(«Char 2, Row 2»); delay(1000); lcd.setCursor(2,2);// начало с символа 3 строка 3 lcd.print(«Char 3, Row 3»); lcd.setCursor(3,3);// начало с символа 4 строка 4 delay(1000); lcd.print(«Char 4, Row 4»); delay(5000); lcd.clear();// очистка дисплея lcd.setCursor(,); lcd.print(«www.umnyjdomik.ru»); lcd.setCursor(,1); lcd.print(«Start Serial Monitor»); lcd.setCursor(,2); lcd.print(«Type chars on keyboard»); } voidloop() { { if(Serial.available()){ delay(100);// задержка для получения всего сообщения lcd.clear(); // чтение всех возможных символов while(Serial.available()>){ lcd.write(Serial.read());// отображение каждого символа на дисплее LCD } } } } |
Общие сведения
Китайские производители модулей LCD1602A v.2.0, программируют английский алфавит в памяти модуля, включая цифры и еще кучу символом (все символы можно посмотреть в мануале). Если необходимого символа нет, можно нарисовать собственный, но не более 8 шт., то есть мы можем одновременно отобразить не более восьми собственных символов. Теперь немного подробнее, для отображения символов, модуль LCD1602A содержит 32 ячейки, каждая из этих ячеек, содержит восемь строк и пять столбцов (5х8). Наглядно можно приставить, как таблицу из 8 на 5 точек, если в любой точке таблицы мы укажем единицу, точка будет светится, если ноль нет.
Ниже продемонстрирован небольшой кусок кода, точно такой же как и в основном примере отличие только в написание.
byte smile =
{
B00000,
B00000,
B01010,
B01010,
B00000,
B10001,
B01110,
B00000,
};
1 2 3 4 5 6 7 8 9 10 11 |
bytesmile8= { B00000, B00000, B01010, B01010, B00000, B10001, B01110, B00000, }; |
Модуль i2c для LCD 1602 Arduino
Самый быстрый и удобный способ использования i2c дисплея в ардуино – это покупка готового экрана со встроенной поддержкой протокола. Но таких экранов не очень много истоят они не дешево. А вот разнообразных стандартных экранов выпущено уже огромное количество. Поэтому самым доступным и популярным сегодня вариантом является покупка и использование отдельного I2C модуля – переходника, который выглядит вот так:
С одной стороны модуля мы видим выводы i2c – земля, питание и 2 для передачи данных. С другой переходника видим разъемы внешнего питания. И, естественно, на плате есть множество ножек, с помощью которых модуль припаивается к стандартным выводам экрана.
Для подключения к плате ардуино используются i2c выходы. Если нужно, подключаем внешнее питание для подстветки. С помощью встроенного подстроечного резистора мы можем настроить настраиваемые значения контрастности J
На рынке можно встретить LCD 1602 модули с уже припаянными переходниками, их использование максимально упощено. Если вы купили отдельный переходник, нужно будет предварительно припаять его к модулю.
Примеры работы для Espruino
В качестве примера подключим дисплей к управляющей плате Iskra JS.
Подключение к Iskra JS
Для коммуникации понадобится Breadboard Half и соединительные провода «папа-папа».
Вывод | Обозначение | Пин Iskra JS |
---|---|---|
1 | GND | GND |
2 | VCC | 5V |
3 | VO | GND |
4 | RS | P12 |
5 | R/W | GND |
6 | E | P11 |
7 | DB0 | — |
8 | DB1 | — |
9 | DB2 | — |
10 | DB3 | — |
11 | DB4 | P5 |
12 | DB5 | P4 |
13 | DB6 | P3 |
14 | DB7 | P2 |
15 | VCC | 5V |
16 | GND | GND |
Вывод текста
Для вывода программы приветствия, воспользуйтесь скриптом:
- hello-amperka.js
-
// создаём переменную для работы с дисплеем // HD44780 — контроллер монохромных жидкокристаллических знакосинтезирующих дисплеев var lcd = require("HD44780").connect(P12,P11,P5,P4,P3,P2); // печатем первую строку lcd.print("Hello world"); // устанавливаем курсор в колонку 0, строку 1 // на самом деле это вторая строка, т.к. нумерация начинается с нуля lcd.setCursor(, 1); // печатаем вторую строку lcd.print("Do It Yourself");
Кирилица
Вывод кирилицы на дисплей с помощью платформы Iskra JS доступен через встроенную в дисплей таблицу знакогенератора.
Таблица знакогенератора
Дисплейный модуль хранит в памяти две страницы знакогенератора, которые состоят из различных символов и букв.
Для вывода символа на дисплей необходимо передать его номер в шестнадцатеричной системе из таблицы знакогенератора.
Так букве соответствует код в шестнадцатеричной системе. Чтобы передать на экран строку «Яndex», необходимо в явном виде с помощью последовательности встроить в строку код символа:
lcd.print("\xB1ndex");
Вы можете смешивать в одной строке обычные символы и явные коды как угодно. Единственный нюанс в том, что после того, как компилятор в строке видит последовательность , он считывает за ним все символы, которые могут являться разрядами шестнадцатеричной системы даже если их больше двух. Из-за этого нельзя использовать символы из диапазона и следом за двузначным кодом символа, иначе на дисплее отобразится неправильная информация. Чтобы обойти этот момент, можно использовать тот факт, что две строки записанные рядом склеиваются.
Сравните две строки кода для вывода надписи «Яeee»:
lcd.print("\xB1eee"); // ошибка lcd.print("\xB1"+"eee"); // правильно
Используя полученную информацию выведем на дисплей сообщение «Привет, Амперка!»:
- hello-amperka-rus.js
-
// создаём переменную для работы с дисплеем // HD44780 — контроллер монохромных жидкокристаллических знакосинтезирующих дисплеев var lcd = require("HD44780").connect(P12,P11,P5,P4,P3,P2); // устанавливаем курсор в колонку 5, строку 0 // на самом деле это первая строка, т.к. нумерация начинается с нуля lcd.setCursor(5, ); // печатаем первую строку lcd.print("\xA8"+"p"+"\xB8\xB3"+"e\xBF"); // устанавливаем курсор в колонку 3, строку 1 // на самом деле это вторая строка, т.к. нумерация начинается с нуля lcd.setCursor(3, 1); // печатаем вторую строку lcd.print("o\xBF"+" A\xBC\xBE"+"ep\xBA\xB8");;
Переключение страниц знакогенератора
Дисплейный модуль хранит в памяти две страницы знакогенератора. По умолчанию установлена нулевая страница. Для переключения между страницами используйте методы:
// переключение с нулевой страницы на первую command(0x101010); // переключение с первой страницы на нулевую command(0x101000);
Дисплей не может одновременно отображать символы разных страниц.
Рассмотрим пример, в котором одна и та же строка будет отображаться по-разному — в зависимости от выбранной страницы.
- change-page.js
-
// создаём переменную для работы с дисплеем // HD44780 — контроллер монохромных жидкокристаллических знакосинтезирующих дисплеев var lcd = require("HD44780").connect(P12,P11,P5,P4,P3,P2); // создаём переменную состояния var state = false; // устанавливаем курсор в колонку 5, строку 0 // на самом деле это первая строка, т.к. нумерация начинается с нуля lcd.setCursor(5, ); // печатаем первую строку lcd.print("\x9b\x9c\x9d\x9e\x9f"); setInterval(function() { // каждую секунду меняем переменую состояния state = !state; // вызываем функцию смены адреса страницы lcdChangePage(); }, 1000); function lcdChangePage () { if (state) { // устанавливаем 0 станицу знакогенератора (стоит по умолчанию) lcd.write(0b101000, 1); } else { // устанавливаем 1 станицу знакогенератора lcd.write(0b101010, 1); } }
Полную таблицу символов с кодами можно найти в документации к экрану.
Программа для Arduino IDE – отображение надписи на дисплее 1602A
Представленный ниже кусок кода достаточно скопипастить в Arduino IDE и загрузить на плату:
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 8, 9, 10, 11 , 12);
void setup() {
lcd.begin(16, 2);
lcd.setCursor(0,1);
lcd.write(«LIGHT: «);
}
void loop() { }
После загрузки программы на плату, на дисплее во второй строке отобразится следующая надпись:
Своеобразный «hello world!» на LCD 1602A запущен. Я вас поздравляю.
Подключаем фоторезистор и заливаем всю программу в Arduino
Теперь подключим фоторезистор. Подключите три провода к свободным рельсам на макетной плате (условно пронумеруем их 1, 2, 3). Оставьте в рельсах немного места для самого датчика освещенности и резистора.
Рельсу GND с макетной платы подключаем к рельсе 1. A0 (аналоговый вход) с Arduino — к рельсе 2. 5 вольт с макетной платы — к рельсе 3.
Дальше подключаем наш датчик и резистор к подготовленным рельсам
Какие именно ноги идут к земле, а какие — к питанию для нашего датчика освещенности и резистора неважно (в отличие от, например, светодиода, в котором есть катод и анод). Так что тут не перепутаете
Датчик освещенности подключаем к рельсе 1 и рельсе 2. Резистор – к рельсе 2 и к рельсе 3.
Теперь вернемся к нашей программе и добавим несколько строк в пустующее пока что тело функции loop():
void loop() {
int sensorValue = analogRead(A0);
lcd.setCursor(7,1);
lcd.print(sensorValue);
delay(100);
}
После заливки на Arduino окончательной версии нашей программы, на дисплее будут отображаться текущие значения уровня освещенности.
Вывод информации:
Для работы дисплея используется встроенная с среду Arduino IDE библиотека LiquidCrystal.h
Функционал библиотеки LiquidCrystal.h
//Работа с курсором
lcd.setCursor(0, 0); // Устанавливаем курсор (номер ячейки, строка)
lcd.home(); // Установка курсора в ноль (0, 0)
lcd.cursor(); // Включить видимость курсора (подчеркивание)
lcd.noCursor(); // Убрать видимость курсора (подчеркивание)
lcd.blink(); // Включить мигание курсора (курсор 5х8)
lcd.noBlink(); // Выключить мигание курсора (курсор 5х8)
//Вывод информации
lcd.print(«Mikrotok.ru»); // Вывод информации
lcd.clear(); // Очистка дисплея, (удаление всех данных) установка курсора в ноль
lcd.rightToLeft(); // Запись производится справа на лево
lcd.leftToRight(); // Запись производится слева на право
lcd.scrollDisplayRight(); // Смещение всего изображенного на дисплее на один символ вправо
lcd.scrollDisplayLeft(); // Смещение всего изображенного на дисплее на один символ влево
//Информация полезная для шпионов:)
lcd.noDisplay(); // Информация на дисплее становится невидимой, данные не стираются
// если, в момент когда данная функция активна, ничего не выводить на дисплей, то
lcd.display(); // При вызове функции display() на дисплее восстанавливается вся информация которая была
1 |
//Работа с курсором lcd.setCursor(,);// Устанавливаем курсор (номер ячейки, строка) lcd.home();// Установка курсора в ноль (0, 0) lcd.cursor();// Включить видимость курсора (подчеркивание) lcd.noCursor();// Убрать видимость курсора (подчеркивание) lcd.blink();// Включить мигание курсора (курсор 5х8) lcd.noBlink();// Выключить мигание курсора (курсор 5х8) lcd.print(«Mikrotok.ru»);// Вывод информации lcd.clear();// Очистка дисплея, (удаление всех данных) установка курсора в ноль lcd.rightToLeft();// Запись производится справа на лево lcd.leftToRight();// Запись производится слева на право lcd.scrollDisplayRight();// Смещение всего изображенного на дисплее на один символ вправо lcd.scrollDisplayLeft();// Смещение всего изображенного на дисплее на один символ влево lcd.noDisplay();// Информация на дисплее становится невидимой, данные не стираются // если, в момент когда данная функция активна, ничего не выводить на дисплей, то lcd.display();// При вызове функции display() на дисплее восстанавливается вся информация которая была |
Сам же дисплей может работать в двух режимах :
• 8-битный режим – для этого используются и младшие и старшие биты (BB0- DB7)
• 4-битный режим – для этого используются и только младшие биты (BB4- DB7)
Использование 8-битного режима на данном дисплее не целесообразно. Для его работы требуется на 4 ноги больше, а выигрыша в скорости практически нет т.к. частота обновления данного дисплея упирается в предел < 10раз в секунду.
Для вывода текста необходимо подключить выводы RS, E, DB4, DB5, DB6, DB7 к выводам контроллера. Их можно подключать к либым пинам Arduino, главное в коде задать правильную последовательность.
Пример Программного кода
Тест LCD Код с символом
#include <LiquidCrystal.h> // Добавляем необходимую библиотеку
LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // (RS, E, DB4, DB5, DB6, DB7)
void setup(){
lcd.begin(16, 2); // Задаем размерность экрана
lcd.setCursor(0, 0); // Устанавливаем курсор в начало 1 строки
lcd.print(«LCD 16×2 Arduino»); // Выводим текст
lcd.setCursor(0, 1); // Устанавливаем курсор в начало 2 строки
lcd.print(«Mikrotok.ru «); // Выводим текст
}
1 |
#include <LiquidCrystal.h> // Добавляем необходимую библиотеку LiquidCrystal lcd(7,6,5,4,3,2);// (RS, E, DB4, DB5, DB6, DB7) voidsetup(){ lcd.begin(16,2);// Задаем размерность экрана lcd.setCursor(,);// Устанавливаем курсор в начало 1 строки lcd.print(«LCD 16×2 Arduino»);// Выводим текст lcd.setCursor(,1);// Устанавливаем курсор в начало 2 строки lcd.print(«Mikrotok.ru «);// Выводим текст |
Результат:
Символ я добавил потом. Что касается символов
Выводы дисплея:
На дисплее имеется 16pin разъем для подключения. Выводы промаркированы на тыльной стороне платы.
1 (VSS) – Питание контроллера (-)
2 (VDD) – Питание контроллера (+)
3 (VO) – Вывод управления контрастом
4 (RS) – Выбор регистра
5 (R/W) – Чтение/запись ( режим записи при соединении с землей)
6 (E) – Еnable (строб по спаду)
7-10 (DB0-DB3) – Младшие биты 8-битного интерфейса
11-14 (DB4-DB7) – Старшие биты интерфейса
15 (A) – Анод (+) питания подсветки
16 (K) – Катод (-) питания подсветки
Я сразу припаял пины “папы”
Обратите внимание что Разъемы 15-16 соответственно”+” и “-” я припаял сразу к основному входу питания дисплея. Так делать не обязательно
Желательно этим пинам подать питание 3,3 Вольт
или добавить сопротивление. Так как напряжение подсветки рассчитано на 3,3 Вольт
Подключение DHT12 к Arduino и вывод на LCD1602
Чтобы сделать устройство автономным, мы будем выводить данные на ЖК дисплей, в моём случае — это LCD1602 (два ряда по 16 символов) который управляется по интерфейсу I2C (PCF8574). Для подключения данного LCD модуля требуется всего 4 линии: питания (Vcc), земля (GND), последовательная линия данных SDA (Serial Data) и последовательная линия тактирования SCL (Serial CLock). Подробнее в статье Подключение LCD1602 к Arduino по I2C (HD44780/PCF8574).
Схема подключения LCD1602 и DHT12 к Arduino
Схема подключения ЖК, DHT12 и Arduino Pro Mini выглядит следующим образом:
В данном случае можно не использовать дополнительные подтягивающие резисторы, так как они присутствуют на модуле PCF8574.
Пример скетча
В приведенном ниже скетче мы будем измерять и отсылать данные о состоянии температуры и влажности по I2C на ЖК дисплей.
/*
Добавляем необходимые библиотеки
*/
#include <DHT12.h>
#include <LiquidCrystal_I2C.h>
#define DEGREE (char)0
/*
Создаём знак градуса
..OO.
.O..O
.O..O
..OO.
…..
…..
…..
*/
uint8_t degree = {
0b00110,
0b01001,
0b01001,
0b00110,
0b00000,
0b00000,
0b00000
};
/*
Создаём экземпляр класса DHT12
*/
DHT12 dht12;
/*
Устанавливаем ЖК-дисплей по адресу 0x27, 16 символов и 2 строки
*/
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
/*
Инициализируем DHT12
*/
dht12.begin();
/*
Инициализируем ЖК-дисплей
*/
lcd.init();
/*
Включаем подсветку дисплея
*/
lcd.backlight();
/*
Добавляем символ градуса
*/
lcd.createChar(DEGREE, degree);
}
void loop() {
/*
Читаем данные с DHT12 и получаем статус
*/
int status = dht12.read();
lcd.clear();
switch (status) {
case DHT12_OK:
/*
Выводим данные на дисплей
*/
lcd.setCursor(0, 0);
lcd.print(F(«T = «));
lcd.print(dht12.getTemperature());
lcd.print(DEGREE);
lcd.print(F(«C»));
lcd.setCursor(0, 1);
lcd.print(F(«H = «));
lcd.print(dht12.getHumidity());
lcd.print(F(» %»));
break;
case DHT12_ERROR_CHECKSUM:
lcd.setCursor(0, 0);
lcd.print(F(«Checksum error»));
break;
case DHT12_ERROR_CONNECT:
lcd.setCursor(0, 0);
lcd.print(F(«Connect error»));
break;
case DHT12_MISSING_BYTES:
lcd.setCursor(0, 0);
lcd.print(F(«Missing bytes»));
break;
default:
lcd.setCursor(0, 0);
lcd.print(F(«Unknown error»));
break;
}
delay(2000);
}
1 |
/* uint8_tdegree8={ 0b00110, 0b01001, 0b01001, 0b00110, 0b00000, 0b00000, 0b00000 }; /* DHT12dht12; /* LiquidCrystal_I2Clcd(0x27,16,2); voidsetup(){ /* Инициализируем DHT12 dht12.begin(); /* Инициализируем ЖК-дисплей lcd.init(); /* Включаем подсветку дисплея lcd.backlight(); /* Добавляем символ градуса lcd.createChar(DEGREE,degree); } voidloop(){ /* Читаем данные с DHT12 и получаем статус intstatus=dht12.read(); lcd.clear(); switch(status){ caseDHT12_OK /* Выводим данные на дисплей lcd.setCursor(,); lcd.print(F(«T = «)); lcd.print(dht12.getTemperature()); lcd.print(DEGREE); lcd.print(F(«C»)); lcd.setCursor(,1); lcd.print(F(«H = «)); lcd.print(dht12.getHumidity()); lcd.print(F(» %»)); break; caseDHT12_ERROR_CHECKSUM lcd.setCursor(,); lcd.print(F(«Checksum error»)); break; caseDHT12_ERROR_CONNECT lcd.setCursor(,); lcd.print(F(«Connect error»)); break; caseDHT12_MISSING_BYTES lcd.setCursor(,); lcd.print(F(«Missing bytes»)); break; default lcd.setCursor(,); lcd.print(F(«Unknown error»)); break; } delay(2000); } |