-
#1
Заголовок должен отражать суть темы. Переформулируй или тема будет удалена.
Хочу сделать проект с использованием: Дисплей 1602 5 В Синий экран с интерфейсной шиной IIC / I2C и Ардуино уно. Умение почти нет вылезает ошибка Инициализация lcd. Помогите пожалуйста ….
Arduino: 1.8.15 (Windows 10), Плата:»Arduino Uno»
C:UserspcDocumentsArduinosketch_sep27asketch_sep27a.ino: In function ‘void setup()’:
sketch_sep27a:24:5: error: ‘class LiquidCrystal_I2C’ has no member named ‘init’
lcd.init(); // Инициализация lcd
^~~~
Несколько библиотек найдено для «LiquidCrystal_I2C.h»
Используется: C:UserspcDocumentsArduinolibrariesLiquidCrystal_I2C
Не используется: C:UserspcDocumentsArduinolibrariesliquidcrystal_i2c-master
Несколько библиотек найдено для «DHT.h»
Используется: C:UserspcDocumentsArduinolibrariesDHT
Не используется: C:UserspcDocumentsArduinolibrariesDHT-sensor-library-master
exit status 1
‘class LiquidCrystal_I2C’ has no member named ‘init’
Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
«Показать подробный вывод во время компиляции»
-
2.1 KB
Просмотры: 6
Решил подключить lcd к esp для будущей постройки управления с мобилы, SCL — D1, SDA — D2, но выдаёт ошибку при компиляций:
Arduino: 1.8.18 (Windows 10), Плата:"Generic ESP8266 Module, 80 MHz, Flash, Disabled (new aborts on oom), Disabled, All SSL ciphers (most compatible), 32KB cache + 32KB IRAM (balanced), Use pgm_read macros for IRAM/PROGMEM, dtr (aka nodemcu), 26 MHz, 40MHz, DOUT (compatible), 1MB (FS:64KB OTA:~470KB), 2, nonos-sdk 2.2.1+100 (190703), v2 Lower Memory, Disabled, None, Only Sketch, 115200"
C:UsersshitsAppDataLocalTemparduino_modified_sketch_578173sketch_jul23a.ino: In function 'void setup()':
sketch_jul23a:7:7: error: 'class LiquidCrystal_I2C' has no member named 'init'
7 | lcd.init()
| ^~~~
Несколько библиотек найдено для "LiquidCrystal_I2C.h"
Используется: C:UsersshitsDocumentsArduinolibrariesArduino-LiquidCrystal-I2C-library-master
Не используется: C:UsersshitsDocumentsArduinolibrariesLiquidCrystal_I2C-1.1.1
exit status 1
'class LiquidCrystal_I2C' has no member named 'init'
Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"
Код самый дефолтный.
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
// put your setup code here, to run once:
lcd.init()
lcd.backlight();
lcd.print("Hi!");
}
void loop() {
// put your main code here, to run repeatedly:
}
Offline
Зарегистрирован: 22.12.2018
Сразу хочу предупредить, что являюсь новичком в Arduino и связался с этой страшной штукой из-за курсовой работы.
Приобрел Arduino Uno, Arduino LCD 1602 i2c и модуль реалного времени RTC1602
Собрал по гайду на ютубе, нашел скетч и попытался его загрузить.
Выдало следующую ошибку при компиляции:
C:UsersextinctDesktopsketch_dec22asketch_dec22a.ino: In function 'void setup()':
sketch_dec22a:98:7: error: 'class LiquidCrystal_I2C' has no member named 'init'
lcd.init(); // initialize the lcd
^
exit status 1
'class LiquidCrystal_I2C' has no member named 'init'
Установлены библиотеки LiquidCrystal_I2C (с обычной Liquid Crystal дисплей никак не работает) и RTClib
Вопрос, как исправить ошибку в коде? Заранее спасибо
сам код скетча
// Date and time functions using a DS1307 RTC connected via I2C and Wire lib
#include <Wire.h>
#include "RTClib.h"
#include <LiquidCrystal_I2C.h>
RTC_DS1307 rtc;
LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display
int progbar=0;
byte p20[8] = {
B10000,
B10000,
B10000,
B10000,
B10000,
B10000,
B10000,
};
byte p40[8] = {
B11000,
B11000,
B11000,
B11000,
B11000,
B11000,
B11000,
};
byte p60[8] = {
B11100,
B11100,
B11100,
B11100,
B11100,
B11100,
B11100,
};
byte p80[8] = {
B11110,
B11110,
B11110,
B11110,
B11110,
B11110,
B11110,
};
byte p100[8] = {
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
};
byte ip20[8] = {
B00001,
B00001,
B00001,
B00001,
B00001,
B00001,
B00001,
};
byte ip40[8] = {
B00011,
B00011,
B00011,
B00011,
B00011,
B00011,
B00011,
};
byte ip60[8] = {
B00111,
B00111,
B00111,
B00111,
B00111,
B00111,
B00111,
};
byte ip80[8] = {
B01111,
B01111,
B01111,
B01111,
B01111,
B01111,
B01111,
};
void setup () {
Serial.begin(57600);
Wire.begin();
rtc.begin();
lcd.init(); // initialize the lcd
lcd.backlight();
lcd.home();
//Make progress characters
lcd.createChar(0, p20);
lcd.createChar(1, p40);
lcd.createChar(2, p60);
lcd.createChar(3, p80);
// lcd.createChar(4, p100);
lcd.createChar(4, ip20);
lcd.createChar(5, ip40);
lcd.createChar(6, ip60);
lcd.createChar(7, ip80);
lcd.clear();
if (! rtc.isrunning()) {
Serial.println("RTC is NOT running!");
// following line sets the RTC to the date & time this sketch was compiled
// rtc.adjust(DateTime(__DATE__, __TIME__));
}
}
void loop () {
digitalClockDisplay();
delay(200);
}
void digitalClockDisplay(){
// digital clock display of the time
DateTime now = rtc.now();
lcd.setCursor(5, 0);
printDigits(now.hour()); // печатает часы
//рисуем прогресс бар часов
progbar=map(now.hour(),0,24,0,25);
//стираем бар если час =0
if(now.hour()<1 ){
lcd.setCursor(0,0);
lcd.print(" ");
}
// отрисовка бара часа в обратном направлении
//сначала рисуем квадраты
for (int i = 0; i<(progbar/5); i++)
{
lcd.setCursor(4-i, 0);
lcd.write(B11111111);
}
//отрисовываем деления в поле символа,
lcd.setCursor(4-progbar/5, 0);
if(progbar%5<4){
lcd.write(progbar%5+4);
}
else{
lcd.write(B11111111);
}
//нарисовали часы и шкалу часов
//рисуем бегающие двоеточие, привязано к секундам, вывод слева или справа двоеточие зависит от четности секунд
lcd.setCursor(7, 0);
if (now.second()%10%2==0){
lcd.print(": ");
}
else
{
lcd.print(" :");
}
//нарисовали двоеточие
//рисуем минуты
lcd.setCursor(9, 0);
printDigits(now.minute());
//стираем бар минут если минуты=0
if(now.minute()<1 ){
lcd.setCursor(11,0);
lcd.print(" ");
}
//рисуем бар минут
//тут уже отрисовка происходит в прямом направлении
progbar=map(now.minute(),0,60,0,25);
for (int i = 0; i<(progbar/5); i++)
{
lcd.setCursor(i+11, 0);
lcd.write(B11111111);
}
lcd.setCursor(progbar/5+11, 0);
if(progbar%5<4){
lcd.write(progbar%5);
}
else{
lcd.write(B11111111);
}
//нарисовали минуты
//рисуем бар минут
//самый длинный бар в самом низу
lcd.setCursor(7, 1);
printDigits(now.second());
if(now.second()<1 ){
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(9,1);
lcd.print(" ");
}
progbar=map(now.second(),0,60,0,80);
for (int i = 0; i<(progbar/5); i++)
{
lcd.setCursor(i, 1);
lcd.write(B11111111);
}
lcd.setCursor(progbar/5, 1);
if(progbar%5<4){
lcd.write(progbar%5);
}
else{
lcd.write(B11111111);
}
lcd.setCursor(7, 1);
printDigits(now.second());
}
void printDigits(int digits){
// utility function for digital clock display: prints preceding colon and leading 0
if(digits < 10){
lcd.print('0');
}
lcd.print(digits);
}
-
День добрый.
Появилась небольшая проблема. Подключил дисплей к конвертеру i2c и пытаюсь вывести элементарный текст из примера. Но он не выводится.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>LiquidCrystal_I2C lcd(0x27,16,2);
void setup()
{
lcd.init(); // Инициализация lcd
lcd.backlight(); // Включаем подсветку
// Курсор находится в начале 1 строки
lcd.print(«Hello world1»); // Выводим текст
lcd.setCursor(0, 1); // Устанавливаем курсор в начало 2 строки
lcd.print(«Hello world2»); // Выводим текст
}
int i;
void loop()
{
}Методом научного тыка понял как вывести его, а именно добавить в loop повтор вывода.
void loop()
{
lcd.setCursor(0, 0);
lcd.print(«TExt1»); // Выводим текст
lcd.setCursor(0, 1); // Устанавливаем курсор в начало 2 строки
lcd.print(«TExt2»); // Выводим текст
}Но как я понял, ардуино постоянно перезаписывает текст на экран, а это не то что нужно. Плюс если вставить delay, то ничего не выводится.
Подскажите пожалуйста, в какую сторону копать?
Необходимо получить вывод статического текста(1 раз передали на экран, и только в случае чего, перезаписываем). -
попробуй после lcd.init(); сделать небольшую паузу.
-
А разве в библиотеке нет примеров?
-
Не помогает(Есть, смысл в них тот же.
//DFRobot.com
//Compatible with the Arduino IDE 1.0
//Library version:1.1
#include <Wire.h>
#include <LiquidCrystal_I2C.h>LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display
void setup()
{
lcd.init(); // initialize the lcd// Print a message to the LCD.
lcd.backlight();
lcd.print(«Hello, world!»);
}void loop()
{
} -
В дополнение, возился с ним 2 часа. И если я подключаю напрямую проводами (без конвертера i2c), то вот этот код выводит на экран.
#include <LiquidCrystal.h>LiquidCrystal lcd(7, 8, 9, 10, 11 , 12);
void setup() {
lcd.begin(16, 2);
lcd.print(«Hello world1»); // Выводим текст
lcd.setCursor(0, 1); // Устанавливаем курсор в начало 2 строки
lcd.print(«Hello world2»); // Выводим текст
}void loop() { }
Получается у меня косяк либо в конвертере, либо в библиотеке?
UPD:
Сам конвертер выглядит вот так.
Я так понимаю что косяк скорее всего в экране, а именно в задействованных пинах. Они вроде у разных экранов по разному используются. Тогда возникает вопрос, где бы мне их поправить?Последнее редактирование: 27 окт 2014
-
/DFRobot.com
//Compatible with the Arduino IDE 1.0
//Library version:1.1
#include <Wire.h>
#include <LiquidCrystal_I2C.h>LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display
void setup()
{
lcd.init(); // initialize the lcd// Print a message to the LCD.
lcd.backlight();
lcd.print(«Hello, world!»);
}void loop()
{
}у меня эта же библиотека ,работает нормально
Последнее редактирование: 27 окт 2014
-
Случаем никаких ошибок не выдает при компиляции. Может другую библиотеку использовать. При включении дисплей загорается с использованием I2C конвертера. Что отображается?
-
Этот код будет выполняться, так как экранчик будет постоянно перезаписываться (от этого он довольно тусклый).
Ошибок не вылезает. Библиотек такое множество, что я начал в них путаться. А на самом модуле не написано производителя, вот пытаюсь выбить у продавца информацию о библиотеках.
Вечером буду дальше ковырять.
-
Я вставлял delay(1000) для того чтобы он не очень быстро перезаписывался . Убрать delay() тогда будет тускло светиться,Будет оч быстро пытаться обновляться — п даташиту надо задержку для обновления экрана
-
Да, мне по сути и перезапись постоянная не нужна. Экранчик используется для выбора меню. А если поставить задержку, то ничего выводиться не будет.
-
Почему не будет. Напиши пример вывода меню. Я пробовал выводить три меню циклически от одной кнопки, нормально работает. Использовал swith() …case
-
Дело не в меню.
Вот этот код будет выводить на экран текст.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display
void setup()
{
lcd.init(); // initialize the lcd// Print a message to the LCD.
lcd.backlight();
}void loop()
{
lcd.print(«Hello, world!»);
}А вот этот не будет показывать на экране ничего. (по факту должен моргать словом)
#include <Wire.h>
#include <LiquidCrystal_I2C.h>LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display
void setup()
{
lcd.init(); // initialize the lcd// Print a message to the LCD.
lcd.backlight();
}void loop()
{
lcd.clear();
delay(3000);
lcd.print(«Hello, world!»);
delay(3000);
}Вечером могу видео залить
-
Так, экран заработал.
Подключил вторую плату i2c и попробовал с ней. Она работает с любой библиотекой.
Тут выходит 2 варианта. Либо 1 плата кривая, либо у меня руки кривые и когда я паял, что то закосячил.
Всем спасибо за попытки помочь!
Библиотека:
Для работы с символьными графическими дисплеями предлагаем воспользоваться библиотекой LiquidCrystal которая входит в стандартный набор Arduino IDE и предназначена для работы по 8-битному (4-битному) параллельному интерфейсу. Если Ваш дисплей подключается к Arduino по аппаратной шине I2, то Вам нужно установить библиотеку LiquidCrystal_I2C (большинство функций которой повторяют функции первой библиотеки).
Поддерживаемые дисплеи:
| Дисплей | Подключение и инициализация |
|---|---|
| LCD1602 — символьный дисплей (16×02 символов), с параллельным интерфейсом (синий)
|
#include <LiquidCrystal.h> LiquidCrystal lcd( 2 , 3 , 4 , 5 , 6 , 7 [ , 8 , 9 , 10 , 11 ] ); void setup(){ lcd.begin( 16 , 2 ); } // Пояснение:
// Если используется 8 проводов шины данных, то указываем их все |
| LCD1602 I2C — символьный дисплей (16×02 символов), с интерфейсом I2C (синий)
|
#include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd( 0x27 или 0x3F , 16 , 2 ); void setup(){ lcd.init(); } // Пояснение: |
| LCD1602 I2C — символьный дисплей (16×02 символов), с интерфейсом I2C (зелёный)
|
#include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd( 0x27 или 0x3F , 16 , 2 ); void setup(){ lcd.init(); } // Пояснение: |
| LCD2004 — символьный дисплей (20×04 символов), с параллельным интерфейсом (синий)
|
#include <LiquidCrystal.h> LiquidCrystal lcd( 2 , 3 , 4 , 5 , 6 , 7 [ , 8 , 9 , 10 , 11 ] ); void setup(){ lcd.begin( 20 , 4 ); } // Пояснение:
// Если используется 8 проводов шины данных, то указываем их все |
| LCD2004 I2C — символьный дисплей (20×04 символов), с интерфейсом I2C (синий)
|
#include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd( 0x27 или 0x3F , 20 , 4 ); void setup(){ lcd.init(); } // Пояснение: |
#1 Пример
Выводим надпись на дисплей LCD1602 подключённый по шине I2C. Для работы с дисплеем LCD2004 нужно изменить 3 строку на LiquidCrystal_I2C lcd(0x27,20,4);
#include <Wire.h> // Подключаем библиотеку для работы с шиной I2C
#include <LiquidCrystal_I2C.h> // Подключаем библиотеку для работы с LCD дисплеем по шине I2C
LiquidCrystal_I2C lcd(0x27,16,2); // Объявляем объект библиотеки, указывая параметры дисплея (адрес I2C = 0x27, количество столбцов = 16, количество строк = 2)
// Если надпись не появилась, замените адрес 0x27 на 0x3F
void setup(){ //
lcd.init(); // Инициируем работу с LCD дисплеем
lcd.backlight(); // Включаем подсветку LCD дисплея
lcd.setCursor(0, 0); // Устанавливаем курсор в позицию (0 столбец, 0 строка)
lcd.print("LCD"); // Выводим текст "LCD", начиная с установленной позиции курсора
lcd.setCursor(0, 1); // Устанавливаем курсор в позицию (0 столбец, 1 строка)
lcd.print("www.iarduino.ru"); // Выводим текст "www.iarduino.ru", начиная с установленной позиции курсора
} //
//
void loop(){} // Код внутри функции loop выполняется постоянно. Но так как мы выводим статичный текст, нам достаточно его вывести 1 раз при старте, без использования кода loop
#2 Пример
Выводим надпись на дисплей LCD1602 подключённый по 4-битной параллельной шине. Для работы с дисплеем LCD2004 нужно изменить 5 строку на lcd.begin(20, 4);
#include <LiquidCrystal.h> // Подключаем библиотеку LiquidCrystal для работы с LCD дисплеем
LiquidCrystal lcd(2,3,4,5,6,7); // Объявляем объект библиотеки, указывая выводы дисплея (RS,E,D4,D5,D6,D7)
// Если используется 8 проводов шины данных, то указываем (RS,E,D0,D1,D2,D3,D4,D5,D6,D7)
void setup(){ //
lcd.begin(16, 2); // Инициируем работу с LCD дисплеем, указывая количество (столбцов, строк)
lcd.setCursor(0, 0); // Устанавливаем курсор в позицию (0 столбец, 0 строка)
lcd.print("LCD2004"); // Выводим текст "LDC1602", начиная с установленной позиции курсора
lcd.setCursor(0, 1); // Устанавливаем курсор в позицию (0 столбец, 1 строка)
lcd.print("www.iarduino.ru"); // Выводим текст "www.iarduino.ru", начиная с установленной позиции курсора
} //
//
void loop(){} // Код внутри функции loop выполняется постоянно. Но так как мы выводим статичный текст, нам достаточно его вывести 1 раз при старте, без использования кода loop
#3 Пример
Выводим надпись «Русский язык» на дисплей LCD1602 подключённый по шине I2C:
#include <Wire.h> // Подключаем библиотеку для работы с шиной I2C
#include <LiquidCrystal_I2C.h> // Подключаем библиотеку для работы с LCD дисплеем по шине I2C
LiquidCrystal_I2C lcd(0x27,16,2); // Объявляем объект библиотеки, указывая параметры дисплея (адрес I2C = 0x27, количество столбцов = 16, количество строк = 2)
//
uint8_t symbol[6][8] = { // Объявляем массив из 6 собственных символов (к и й я з ы), каждый символ состоит из 8 байт
{ 0, 0,18,20,24,20,18, 0 }, // к
{ 0, 0,17,19,21,25,17, 0 }, // и
{10, 4,17,19,21,25,17, 0 }, // й
{ 0, 0,15,17,15, 5, 9, 0 }, // я
{ 0, 0,14,17, 6,17,14, 0 }, // з
{ 0, 0,17,17,29,19,29, 0 }}; // ы
//
void setup(){ //
lcd.init(); // Инициируем работу с LCD дисплеем
lcd.backlight(); // Включаем подсветку LCD дисплея
lcd.createChar(1, symbol[0]); // Загружаем 1 символ "к" в ОЗУ дисплея
lcd.createChar(2, symbol[1]); // Загружаем 2 символ "и" в ОЗУ дисплея
lcd.createChar(3, symbol[2]); // Загружаем 3 символ "й" в ОЗУ дисплея
lcd.createChar(4, symbol[3]); // Загружаем 4 символ "я" в ОЗУ дисплея
lcd.createChar(5, symbol[4]); // Загружаем 5 символ "з" в ОЗУ дисплея
lcd.createChar(6, symbol[5]); // Загружаем 6 символ "ы" в ОЗУ дисплея
lcd.setCursor(0, 0); // Устанавливаем курсор в позицию (0 столбец, 0 строка)
lcd.print("Pycc123 4561"); // Выводим текст "Pycckий языk", где "Pycc" написано латиницей, а "kий языk" - символами из ОЗУ дисплея
} // Если нужно вывести символ из ОЗУ дисплея, то пишем и номер символа
//
void loop(){} // Код внутри функции loop выполняется постоянно. Но так как мы выводим статичный текст, нам достаточно его вывести 1 раз при старте, без использования кода loop
#4 Пример
Выводим время прошедшее после старта на дисплей LCD1602 подключённый по шине I2C:
#include <Wire.h> // Подключаем библиотеку для работы с шиной I2C
#include <LiquidCrystal_I2C.h> // Подключаем библиотеку для работы с LCD дисплеем по шине I2C
LiquidCrystal_I2C lcd(0x27,16,2); // Объявляем объект библиотеки, указывая параметры дисплея (адрес I2C = 0x27, количество столбцов = 16, количество строк = 2)
//
uint8_t tim_D, tim_H, tim_M, tim_S; // Объявляем переменные для хранения дней, часов, минут и секунд.
uint32_t tim; // Объявляем переменную для хранения общего количества времени прошедшего после старта.
// Если надпись не появилась, замените адрес 0x27 на 0x3F
void setup(){ //
lcd.init(); // Инициируем работу с LCD дисплеем
lcd.backlight(); // Включаем подсветку LCD дисплея
} //
//
void loop(){ //
// Получаем время прошедшее после старта: //
tim = millis() / 1000; // Получаем общее количество секунд (максимум 4'294'967 сек ≈ 49,7 дней).
tim_S = tim % 60; // Получаем секунды: остаток от деления всех секунд на минуту (60 сек).
tim = (tim-tim_S) / 60; // Получаем общее количество минут.
tim_M = tim % 60; // Получаем минуты: остаток от деления всех минут на час (60 мин).
tim = (tim-tim_M) / 60; // Получаем общее количество часов.
tim_H = tim % 24; // Получаем часы: остаток от деления всех часов на день (24 час).
tim_D = (tim-tim_H) / 24; // Получаем общее количество дней.
// Выводим время прошедшее после старта: //
if (millis()%1000<100){ // Условие выполняется в течении 100 первых миллисекунд каждой новой секунды.
delay(100); lcd.setCursor(0, 0); // Устанавливаем курсор в позицию (0 столбец, 0 строка).
lcd.print("Days: "); // Выводим текст.
if(tim_D<10){lcd.print( 0 );} // Выводим 0 перед количеством дней.
lcd.print(tim_D ); // Выводим количество дней.
lcd.setCursor(0, 1); // Устанавливаем курсор в позицию (0 столбец, 1 строка)
lcd.print("Time: "); // Выводим текст.
if(tim_H<10){lcd.print( 0 );} // Выводим 0 перед количеством часов.
lcd.print(tim_H ); // Выводим количество часов.
lcd.print(':' ); // Выводим символ.
if(tim_M<10){lcd.print( 0 );} // Выводим 0 перед количеством минут.
lcd.print(tim_M ); // Выводим количество минут.
lcd.print(':' ); // Выводим символ.
if(tim_S<10){lcd.print( 0 );} // Выводим 0 перед количеством секунд.
lcd.print(tim_S ); // Выводим количество секунд.
} //
} //
Функции, общие для библиотек LiquidCrystal и LiquidCrystal_I2C:
- begin(cols,rows,[char_size]); – Инициализация дисплея с указанием количества столбцов, строк и размера символа.
- clear(); – Очистка дисплея с установкой курсора в положение 0,0 (Занимает много времени!).
- home(); – Установка курсора в положение 0,0 (Занимает много времени!).
- display(); – Быстрое включение дисплея (без изменения данных в ОЗУ).
- noDisplay(); – Быстрое выключение дисплея (без изменения данных в ОЗУ).
- blink(); – Включение мигающего курсора (с частотой около 1 Гц).
- noBlink(); – Выключение мигающего курсора.
- cursor(); – Включение подчеркивания курсора.
- noCursor(); – Выключение подчеркивания курсора.
- scrollDisplayLeft(); – Прокрутка дисплея влево. Сдвиг координат дисплея на один столбец влево (без изменения ОЗУ).
- scrollDisplayRight(); – Прокрутка дисплея вправо. Сдвиг координат дисплея на один столбец вправо (без изменения ОЗУ).
- leftToRight(); – Указывает в дальнейшем сдвигать положение курсора, после вывода очередного символа, на один столбец вправо.
- rightToLeft(); – Указывает в дальнейшем сдвигать положение курсора, после вывода очередного символа, на один столбец влево.
- noAutoscroll(); – Указывает в дальнейшем выравнивать текст по левому краю от позиции курсора (как обычно).
- autoscroll(); – Указывает в дальнейшем выравнивать текст по правому краю от позиции курсора.
- createChar(num,array); – Запись пользовательского символа в CGRAM дисплея под указанным номером.
- setCursor(col,row); – Установка курсора в позицию указанную номером колонки и строки.
- print(data); – Вывод текста, символов или цифр на экран дисплея. Синтаксис схож с одноимённой функцией класса Serial.
Функции, реализованные только в библиотеке LiquidCrystal_I2C:
- init(); – Инициализация дисплея. Должна быть первой командой библиотеки LiquidCrystal_I2C после создания объекта. На самом деле данная функция есть и в библиотеке LiquidCrystal, но в той библиотеке она вызывается автоматически (по умолчанию) при создании объекта.
- backlight(); – Включение подсветки дисплея.
- noBacklight(); – Выключение подсветки дисплея.
- setBacklight(flag); – Управление подсветкой (true — включить / false — выключить), используется вместо функций noBacklight и backlight.
Подключение:
|
// Для шины I2C: |
Параметр:
|
| // Для параллельной шины из 4 проводов: #include <LiquidCrystal.h> LiquidCrystal lcd( RS , E , D4 , D5 , D6 , D7 ); void setup(){ lcd.begin( col , row ); } |
Параметр:
|
| // Для параллельной шины из 8 проводов: #include <LiquidCrystal.h> LiquidCrystal lcd( RS , E , D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 ); void setup(){ lcd.begin( col , row ); } |
|
| begin( col , row , [size] ); Инициализация дисплея с указанием размеров экрана и символов. |
Параметр:
|
/* Для шины I2C: */
#include <Wire.h> // Подключаем библиотеку для работы с шиной I2C
#include <LiquidCrystal_I2C.h> // Подключаем библиотеку для работы с LCD дисплеем по шине I2C
LiquidCrystal_I2C lcd(0x3F,20,4); // Объявляем объект библиотеки, указывая параметры дисплея (адрес I2C = 0x3F, количество столбцов = 20, количество строк = 4)
//
void setup(){ //
lcd.init(); // Инициируем работу с LCD дисплеем
lcd.backlight(); // Включаем подсветку LCD дисплея
... // Выводим информацию, которая должна отображаться при старте
} //
//
void loop(){} //
... // Выводим информацию которая должна меняться по алгоритму Вашего кода
} //
/* Для 4 проводной параллельной шины: */
#include <LiquidCrystal.h> // Подключаем библиотеку LiquidCrystal для работы с LCD дисплеем
LiquidCrystal lcd(2,3,4,5,6,7); // Объявляем объект библиотеки, указывая выводы дисплея (RS,E,D4,D5,D6,D7)
// Если используется 8 проводов шины данных, то указываем (RS,E,D0,D1,D2,D3,D4,D5,D6,D7)
void setup(){ //
lcd.begin(16, 2); // Инициируем работу с LCD дисплеем, указывая количество (столбцов, строк)
... // Выводим информацию, которая должна отображаться при старте
} //
//
void loop(){} //
... // Выводим информацию которая должна меняться по алгоритму Вашего кода
} //
Функции управления дисплеем:
| display(); Включает дисплей после того как он был выключен функцией noDisplay. |
Примечание: Функция выполняется быстро и без изменений в ОЗУ дисплея. |
| noDisplay(); Выключает дисплей. Данные на дисплее не будут отображаться до вызова функции display, но и не сотрутся из памяти ОЗУ, а после вызова функции display, опять будут отображаться. |
Примечание: Функция выполняется быстро и без изменений в ОЗУ дисплея. |
| scrollDisplayLeft(); Сдвигает координаты дисплея на один столбец влево. Постоянный вызов данной функции создаст эффект бегущей строки. Координаты сдвигаются как для имеющейся на дисплее информации, так и для той, которая будет выведена после. |
Примечание: Функция выполняется без изменений ОЗУ дисплея. Если вызвать функцию 40 раз подряд, то координата вернётся в изначальную точку |
| scrollDisplayRight(); Сдвигает координаты дисплея на один столбец вправо. Постоянный вызов данной функции создаст эффект бегущей строки. Координаты сдвигаются как для имеющейся на дисплее информации, так и для той, которая будет выведена после. |
Примечание: Функция выполняется без изменений ОЗУ дисплея. Если вызвать функцию 40 раз подряд, то координата вернётся в изначальную точку |
| clear(); Очистка дисплея с установкой курсора в положение 0,0. Информация имеющаяся на дисплее безвозвратно сотрётся. |
Примечание: Занимает много времени. |
| backlight(); Включение подсветки дисплея. |
Примечание: Функция реализована только в библиотеке LiquidCrystal_I2C. |
| noBacklight(); Выключение подсветки дисплея. |
Примечание: Функция реализована только в библиотеке LiquidCrystal_I2C. |
| setBacklight( flag ); Управление подсветкой (вместо функций noBacklight и backlight). |
Параметр:
Примечание: Функция реализована только в библиотеке LiquidCrystal_I2C. |
/* Выводим надпись для наблюдения за функциями управления дисплеем: */
lcd.cursor(0,0); // Устанавливаем курсор в крайний верхний угол дисплея (0 столбец, 0 строка)
lcd.print("iarduino.ru"); // Выводим текст "iarduino.ru" (первая буква "i" будет находиться в позиции "0,0", а последняя "u" в позиции "10,0", невидимый курсор в позиции "11,0")
//
lcd.noDisplay(); // Выключаем дисплей (надпись исчезнет с дисплея)
lcd.display(); // Включаем дисплей (надпись появится на дисплее в том же месте)
lcd.scrollDisplayLeft(); // Сдвигаем координаты столбцов влево (на дисплее будет отображаться "arduino.ru" без первой буквы "i", которая выйдет за пределы дисплея, но останется в его ОЗУ)
lcd.scrollDisplayRight(); // Сдвигаем координаты столбцов вправо (на дисплее будет отображаться "iarduino.ru" на том же месте, где и была выведена изначально)
lcd.clear(); // Чистим дисплей (надпись безвозвратно исчезнет с дисплея)
lcd.noBacklight(); // Отключаем подсветку дисплея
lcd.backlight(); // Включаем подсветку дисплея
lcd.setBacklight(0); // Отключаем подсветку дисплея
lcd.setBacklight(1); // Включаем подсветку дисплея
Функции управления курсором:
| setCursor( col , row ); Установка курсора в указанную позицию. |
Параметр:
|
| home(); Установка курсора в позицию 0,0. Работает как функция setCursor(0,0); |
Примечание: Занимает много времени. |
| blink(); Включение мигающего курсора. |
Примечание: Курсор занимает всё поле символа и мигает с частотой около 1 Гц, в той позиции где он был установлен ранее. |
| noBlink(); Выключение мигающего курсора. |
Примечание: Курсор становится невидим, но его позиция сохраняется. |
| cursor(); Включение подчеркивания курсора. |
Примечание: Курсор принимает вид символа подчёркивания и находится в той позиции, где он был установлен ранее. |
| noCursor(); Выключение подчеркивания курсора. |
Примечание: Курсор становится невидим, но его позиция сохраняется. |
lcd.setCursor( 0, 1); // Устанавливаем курсор на первый символ второй строки (нумерация строк и столбцов начинается с 0)
lcd.home(); // Устанавливаем курсор на первый символ первой строки (как при вызове lcd.setCursor(0,0);)
lcd.blink(); // Делаем курсор видимым (на месте курсора будет мигать прямоугольник)
lcd.noBlink(); // Делаем курсор невидимым (убираем мигающий прямоугольник)
lcd.cursor(); // Делаем курсор видимым (на месте курсора появится знак подчёркивания)
lcd.noCursor(); // Делаем курсор невидимым (убираем знак подчёркивания)
// Если курсор попадает на место где есть символ, то этот символ не исчезает
Функции указывающие направление и выравнивание:
| leftToRight(); Указывает, что после каждого нового символа, положение курсора должно сдвигаться на один столбец вправо. |
Примечание: Если вывести текст «abc» на дисплее отобразится «abc» и текст будет находиться правее от изначального положения курсора. (Как обычно) |
| rightToLeft(); Указывает, что после каждого нового символа, положение курсора должно сдвигаться на один столбец влево. |
Примечание: Если вывести текст «abc» на дисплее отобразится «cba» и текст будет находиться левее от изначального положения курсора. (Письменность справа налево) |
| noAutoscroll(); Указывает, что в дальнейшем, текст нужно выравнивать по левому краю от изначальной позиции курсора. |
Примечание: если установить курсор в позицию 10,0 и вывести текст, то в данной позиции будет находиться первый символ выведенного текста. (Как обычно) |
| autoscroll(); Указывает, что в дальнейшем, текст нужно выравнивать по правому краю от изначальной позиции курсора. |
Примечание: если установить курсор в позицию 10,0 и вывести текст, то в данной позиции будет находиться курсор. (Координаты дисплея будут сдвинуты влево, как будто Вы вызвали функцию scrollDisplayLeft столько раз, сколько букв в выведенном тексте) |
lcd.leftToRight(); // Указываем курсору сдвигаться вправо (Как обычно в европейской письменности)
lcd.clear(); lcd.setCursor(5,0); lcd.print("ABC"); // На дисплее увидим: " ABC " (После "A" курсор сдвинулся вправо и вывелась "B", далее курсор сдвинулся вправо и вывелась "C")
lcd.rightToLeft(); // Указываем курсору сдвигаться влево (Как в письменности справа налево)
lcd.clear(); lcd.setCursor(5,0); lcd.print("ABC"); // На дисплее увидим: " CBA " (После "A" курсор сдвинулся влево и вывелась "B", далее курсор сдвинулся влево и вывелась "C")
lcd.noAutoscroll(); // Устанавливаем выравнивание по левому краю (Как обычно)
lcd.clear(); lcd.setCursor(5,0); lcd.print("ABC"); // На дисплее увидим: " ABC " (Как обычно)
lcd.autoscroll(); // Устанавливаем выравнивание по правому краю (Координаты дисплея будут сдвинуты влево на количество выведенных символов)
lcd.clear(); lcd.setCursor(5,0); lcd.print("ABC"); // На дисплее увидим: " ABC " (Координаты дисплея будут сдвинуты на 3 символа влево, так как после каждого символа совершается вызов функции scrollDisplayLeft)
Функции ввода текста и символов:
| createChar(num,array); Запись пользовательского символа в CGRAM дисплея под указанным номером. Если Вы хотите вывести текст (функцией print) в котором должен находиться установленный Вами символ, укажите слэш и номер под которым был записан этот символ: print(«C1MBO2»). |
Параметр:
Примечание: Массив состоит из нескольких байт, количество которых равно количеству строк в символе. Каждый установленный бит байта соответствует установленному (отображаемому) пикселю символа. |
| print(data); Вывод текста, символов или цифр на экран дисплея. Допускается указывать второй параметр, как у одноимённой функции класса Serial. |
Параметр:
Примечание: Синтаксис схож с одноимённой функцией класса Serial. |
#include <Wire.h> // Подключаем библиотеку для работы с шиной I2C
#include <LiquidCrystal_I2C.h> // Подключаем библиотеку для работы с LCD дисплеем по шине I2C
LiquidCrystal_I2C lcd(0x27,16,2); // Объявляем объект библиотеки, указывая параметры дисплея (адрес I2C = 0x27, количество столбцов = 16, количество строк = 2)
//
uint8_t symbol_d[8] = {0b00000, // 1 строка символа "д"
0b00000, // 2 строка символа "д"
0b00110, // 3 строка символа "д"
0b01010, // 4 строка символа "д"
0b01010, // 5 строка символа "д"
0b01010, // 6 строка символа "д"
0b11111, // 7 строка символа "д"
0b10001}; // 8 строка символа "д" Весь массив можно записать одной строкой: uint8_t symbol_d[8]={0,0,6,10,10,10,31,17};
//
uint8_t symbol_i[8] = {0b00000, // 1 строка символа "и"
0b00000, // 2 строка символа "и"
0b10001, // 3 строка символа "и"
0b10011, // 4 строка символа "и"
0b10101, // 5 строка символа "и"
0b11001, // 6 строка символа "и"
0b10001, // 7 строка символа "и"
0b00000}; // 8 строка символа "и" Весь массив можно записать одной строкой: uint8_t symbol_i[8]={0,0,17,19,21,25,17,0};
void setup(){ //
lcd.init(); // Инициируем работу с LCD дисплеем
lcd.backlight(); // Включаем подсветку LCD дисплея
lcd.createChar(1,symbol_d); // Загружаем в память дисплея первый символ
lcd.createChar(2,symbol_i); // Загружаем в память дисплея второй символ
lcd.clear(); // Чистим экран
lcd.setCursor(0,0); // Устанавливаем курсор в крайний верхний угол
lcd.print("Pa12o"); // Выводим текст "Paдиo" при этом символы 'P', 'a' , 'o' пишем латиницей,
} // а символы 'д', 'и' выводим из памяти дисплея, указывая их номера
//
void loop(){ //
lcd.setCursor(0,1); lcd.print(" "); // стираем всю нижнюю строку
lcd.setCursor(0,1); lcd.print("i"); lcd.print("arduino"); lcd.print(".ru"); // выводим текст "i" "arduino" ".ru" в нижней строке
delay(2000); // ждём 2 секунды
lcd.setCursor(0,1); lcd.print(" "); // стираем всю нижнюю строку
lcd.setCursor(0,1); lcd.print(12.345); // выводим число 12.34 (выводится 2 знака после запятой)
delay(2000); // ждём 2 секунды
lcd.setCursor(0,1); lcd.print(" "); // стираем всю нижнюю строку
lcd.setCursor(0,1); lcd.print(12, HEX); // выводим число 12 в виде шестнадцатиричного числа
delay(2000); // ждём 2 секунды
lcd.setCursor(0,1); lcd.print(" "); // стираем всю нижнюю строку
lcd.setCursor(0,1); lcd.print(1); // выводим число 1
delay(2000); // ждём 2 секунды
}
0 / 0 / 0
Регистрация: 02.03.2016
Сообщений: 90
1
17.03.2021, 10:48. Показов 833. Ответов 3
Начал использовать дисплей LCD 20х4 MT-20S4-v3, MT-20S4A-2YLG-I (фото обратной стороны будет ниже). Когда я пробовал выводить текст и разместил эти строчки в функции void setup(), вывод текста на экран прошел без ошибок. А потом я попробовал выводить текст из переменных, используя функцию void loop() (текст программы ниже), но при выводе на экран появились ошибочные символы в конце первой, второй и четвертой строк. (на картинке подчеркнуты красным цветом), и еще если в функции delay(..) записывать маленькое значение то текст на экране начинает так быстро моргать, что ни чего не видно.
| C++ | ||
|
Миниатюры
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0



