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 секунды }
Arduino.ru
Проблемы как решить проблему ?
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
А чо гугал-перевоччик говорит по этому поводу? «LiquidCrystal_I2C.h: No such file or directory»
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Проблема — это когда, например, на пиво аллергия, а здесь . тьфу . для начала прочитать сообщение, если надо — со словарём, а прочитав, и поняв, что он просто не может найти библиотеку LiquidCrystal_I2C, правильно установить её.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Теперь такая проблема «Ошибка компиляции для платы Arduino/Genuino Uno.»
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Теперь такая проблема «Ошибка компиляции для платы Arduino/Genuino Uno.»
Вам уже сказали, что проблема — это когда на пиво аллергия. А всё, о чём Вы говорите — это плюнуть и растереть. А сообщения надо читать. Если не умеете читать — учитесь.
А если Вам и впрямь нужна помощь, а не насмешки, потрудитесь выкладывать сообщения полностью, а не огрызки. Например, в данном случае, собственно реальную информацию Вы выбросили, оставили стандартный для всех сообщений хвост.
Источник
Arduino.ru
Нужна помощь с DS1302 +LCD модуль
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Дело в том что не как не получается вывести показания на дисплей теже часики на LCD модуль там всего 4 вывода +. — sda scl . а на стандартном примере
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Вот такая же фигня. Подключаю микрофон. Прошиваю скеч для мигания светодиодиком.. и микрофон нифига не работает. Не знаете почему?
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Спасибо ща попробую что получится
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Ошибка: lcd.init(); // initialize the lcd ?
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Честно говоря не помю откуда брал библиотеку LiquidCrystal I2C , но по-моему всё-таки здесь : http://arduino-project.net/biblioteki-arduino/
Попробуйте примеры из неё.
И обратите внимание на название микросхемы PCF8574T (A), (AT) , у меня в одной посылке (5 шт.) три были с буквами Т , а ещё две АТ.
Соответственно разная адресация для Т LiquidCrystal_I2C lcd(0x27,16,2) , для АТ LiquidCrystal_I2C lcd(0x3F,16,2)
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Вот за это огромное спасибо все заработало просто мне нужно было поставить 0х27,16,2 и вуаля
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Еще один вопрос как вывести на экран к примеру 2 квадратика и чтоб один из квадратика мигнул как бы получается глазом
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Помогите мне в этот скетч еще модуль реального времени ds1302 добавить плиз
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Помогите мне в этот скетч еще модуль реального времени ds1302 добавить плиз
а смысл помогать, мы то умеем, а Вы не научитесь! с экраном закончили? сделали часики на milis?
прежде, чем подключать модуль, выведите часы простые, а потом с модулем разберитесь, а потом. соединяйте.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
просто часы я делал этот скетч с температорой и влажностью ошибки переправил а вот чтоб 2 скетча в один слить не могу 5 часов мучую один дисплей у же не работает 2 ой пока что живой так что нужна помощь (
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
просто часы я делал этот скетч с температорой и влажностью ошибки переправил а вот чтоб 2 скетча в один слить не могу 5 часов мучую один дисплей у же не работает 2 ой пока что живой так что нужна помощь (
опросили первое устрйство, получили переменные, вывели их на экран — какие могут быть сложности. Могу посоветовать лишь одно, посылать в монитор порта переменные в контрольных точках и проверять их значения. типа
Источник
Lcd init arduino ошибка
Вижу, что мысль о важности первоначальных проверок, просто пролетела у всех мимо ушей.
Какие бывают Linux?
Бывают для аппаратной части процессоров
1) x86 операционные системы 32bit
2) x86 операционные системы 64bit
3) ARM операционные системы 32bit
4) ARM операционные системы 64bit.
Для x86 это всем привычные
1) настольные компьютеры
2) ноутбуки
Для процессоров ARM
3) смартфоны (телефоны)
4) планшеты
5) ноутбуки
6) всякие Raspberry.
Для телефонов соответственно IDE могут быть разные, например глюкавое ArduinoDroid.
IDE для Linux теоретически может быть любое для C, С++ но скетчи под это дело надо переделывать в нормальный код, это уже не ArduinoIDE для новичков.
Eclipse
Bluefish
NetBeans
Komodo IDE
Anjuta
MonoDevelop
CodeLite
Kdevelop
и еще много всякого. А вот что умудрился использовать вопрошающий, загадка.
Может быть использовано и ArduinoIDE но работать будет не на всех Linux.
Для ArduinoIDE разных версий, совместимость скетчей отсутствует, почему так происходит придумайте сами.
Например на совершенно рабочий скетч ArduinoIDE стала выдавать ошибку компиляции «‘prog_char’ does not name a type», оказывается просто изменили ‘prog_char’ и теперь надо просто ‘char’. А формально оба скетча рабочие, просто прошиваться будут только на разных версиях ArduinoIDE. И это относиться не просто к скетчам, а и к библиотекам. Взяли скрестили новую версию библиотеки со старым ArduinoIDE или наоборот старую библиотеку с новой версией ArduinoIDE и работать скетч уже не будет. Поэтому. Установили в какой-то операционной системе какую то IDE. Написали по какому то примеру какой то скетч, а не работает. То ли с железом проблема. То ли программы сорятся. То ли ошибок в скетче понаделали. Если скетч старый и рабочий, а у Вас стоит ArduinoIDE с новыми правилами написания скетчей, все равно формально скетч рабочий — просто факт.
И какая ситуация конкретно у спрашивающего, форуму не ведомо. Для начинающих. Установили в чем-то какой-то IDE. Запускаете из примеров Blink. Меняете частоту вспышек. Убеждаетесь, что эти изменения вызваны Вашими действиями. Это Важный шаг. Не надо этот шаг пропускать, типа и так все понятно и просто. Если лампочки на ардуинке мигают то это говорит о том, что какой то процесс идет. Но не говорит о том, что все правильно сделано. При этом может и не работать. Шаг следующий. Устанавливаете или используете установленную библиотеку. Запускаете примеры из этой библиотеки. Разбираетесь почему не работает. И только после того, как убедитесь, что Ваше устройство (в данном случае дисплей) работает на примерах из библиотеки, начинаете с этим делать что то свое. И не раньше. А вопросы не работает стандартное, совсем другая тема.
Если хотите адекватный ответ, пишите операционную систему полностью. Версию IDE полностью. Версию использованной библиотеки полностью. Работала ли первоначальная проверка вспышкой и стандартные примеры на используемой библиотеке.
PS Когда захотел помочь. Получилось как обычно. Думаешь одно, а все совсем иначе. А вопрошающий считает, что вокруг одни экстрасенсы и всю дополнительную информацию про него обязаны знать.
Источник
Arduino.ru
Не удается запустить дисплей
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Припаял переходник к дисплею, подключаю к ардуине. В итоге — подсветка включается и работает, но на экране не появляется никаких символов. Адрес проверял через ic2_scan, он верный.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Контрастность подсветки крутили?
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
В оба направления до конца прокрутил — не менялось ничего
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Про проблему с LiquidCrystal_I2C читали? На форуме обсасывалось неоднократно, в том числе и я отвечал, что надо поменять в библиотеке, чтобы она заработала.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
К сожалению, нет. Можно ссылку?
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Ищите, есть на форуме. Реально много раз обсуждалось, поиск — в правом верхнем углу.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Гугл поиск по сайту гавна, если честно.
Искал проблема LiquidCrystal_I2C, в итоге нашел конфликты с другими библиотеками, и другие случаи которые заключаются только в одном показываемом символе, или лишних.
В итоге что бы перестраховаться поменял пару библиотек, результата никакого.
Но я не нашел конкретно где и что менять, помогите пожалуйста
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Могу конечно ошибаться, но может все дело в использованных для подключения пинах? 0 и 1 вызывают подозрение.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Решил начать с малого и попробовал местную библиотеку. При билде ошибка:
Могу конечно ошибаться, но может все дело в использованных для подключения пинах? 0 и 1 вызывают подозрение.
Пины при декларилованнии сверял с инфой что дана на странице продукта на али.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Упс. Что то я не внимательно смотрел — у вас же i2c.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
В целях эксперимента решил попробовать скетч с той же темы. Результат тот же что и с прошлым. Экран светится, раз моргнул и опять светится
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Еще рекомендовал бы проверить дисплей в работе без адаптера и адаптер отдельно от дисплея с помощью светодиодов проверить в работе.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Arduino Nano I2C: A4 (SDA) и A5 (SCL).
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Arduino Nano I2C: A4 (SDA) и A5 (SCL).
Это у него какая то странная библа требующая прописки пинов pcf8574.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
странные пины упоминаются + странная библиотека . че тогда удивляться, если и дальше, «Все страньше и страньше!»
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Все пляски с I2c надо начинать с i2cscan. На какой адрес откликнется — тот и использовать. У меня разные диспеи откликаются на 0х27,0х30,0х3F. Крутить контрастность можно и без подключения. При сбросе или включении дисплей сам заполняет первый ряд квадратами. Покрутив контрастность нужно добиться,чтобы первый и второй ряд заметно различались. Здесь либа, которая работает даже с тинькой: http://playground.arduino.cc/uploads/Code/LiquidCrystal_I2C_85V1.zip
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Для перестраховки начал делать все сначала
Провел ic2_scan — адрес тот же — 27
Взял новую либу
Еще рекомендовал бы проверить дисплей в работе без адаптера и адаптер отдельно от дисплея с помощью светодиодов проверить в работе.
Результат — отсутсвие результата.
Решил потом добавить дефайны сверишись с данными на странице продукта
Результат тот же.
На дисплее во время работы нет вообще никакого намека на рядки, квадраты итд(экран полностью пустой), может это имеет какое то значение?
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Попробуте вот эту библиотеку. Писал около месяца, только вчера закончил тестировать выложил на Github. По моему скромному мнению это самая лучшая либа в сети для работы с PCF8575/ HD44780U и его клонами.
Будут вопросы пишите.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Попробуте вот эту библиотеку. Писал около месяца, только вчера закончил тестировать выложил на Github. По моему скромному мнению это самая лучшая либа в сети для работы с PCF8575/ HD44780U и его клонами.
Будут вопросы пишите.
Естественно, грех было не попробовать и вашу библиотеку. С начала без дефайнов, потом с ними, одиноково вообще ничего не работает.
Меня вообще реально смущает отсутствие любых признаков жизни на дисплее кроме подсветки. Думаю все таки стоит попробовать без i2c переходника подключить, хотя думаю это вряд ли изменит фронт событий. Единственное почему я этого все еще не сделал, только потому что меня отталкивает перспектива паяния 16 проводков, если я могу присобачить 4
Источник