Loading
Offline
Зарегистрирован: 22.12.2018
Сразу хочу предупредить, что являюсь новичком в Arduino и связался с этой страшной штукой из-за курсовой работы.
Приобрел Arduino Uno, Arduino LCD 1602 i2c и модуль реалного времени RTC1602
Собрал по гайду на ютубе, нашел скетч и попытался его загрузить.
Выдало следующую ошибку при компиляции:
C:\Users\extinct\Desktop\sketch_dec22a\sketch_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); }
Решил подключить 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:\Users\shits\AppData\Local\Temp\arduino_modified_sketch_578173\sketch_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:\Users\shits\Documents\Arduino\libraries\Arduino-LiquidCrystal-I2C-library-master
Не используется: C:\Users\shits\Documents\Arduino\libraries\LiquidCrystal_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:
}
-
День добрый.
Появилась небольшая проблема. Подключил дисплей к конвертеру 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 плата кривая, либо у меня руки кривые и когда я паял, что то закосячил.
Всем спасибо за попытки помочь!
Go to arduino
lcd.init() is not private error message
I have this code for my lcd screen connected to an arduino UNO :
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
void setup() {
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(0,0);
lcd.print("hello");
}
void loop() {
}
and this is the error message that I get:
Arduino: 1.8.19 (Windows 10), Board: «Arduino Uno»
LiquidCrystal_I2C lcd(0x3f,16,2);
^
In file included from C:\Users\leomu\OneDrive\Documents\UNIVERSIDAD\2021-2022\S2\Physics for csai\Final project\code\test\test.ino:2:0:
C:\Users\leomu\OneDrive\Documents\Arduino\libraries\New-LiquidCrystal-master/LiquidCrystal_I2C.h:65:4: note: initializing argument 3 of ‘LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t, uint8_t, t_backlightPol)’
LiquidCrystal_I2C (uint8_t lcd_Addr, uint8_t backlighPin, t_backlightPol pol);
^~~~~~~~~~~~~~~~~
C:\Users\leomu\OneDrive\Documents\UNIVERSIDAD\2021-2022\S2\Physics for csai\Final project\code\test\test.ino: In function ‘void setup()’:
test:10:12: error: ‘int LiquidCrystal_I2C::init()’ is private within this context
lcd.init();
^
In file included from C:\Users\leomu\OneDrive\Documents\UNIVERSIDAD\2021-2022\S2\Physics for csai\Final project\code\test\test.ino:2:0:
C:\Users\leomu\OneDrive\Documents\Arduino\libraries\New-LiquidCrystal-master/LiquidCrystal_I2C.h:185:9: note: declared private here
int init();
^~~~
exit status 1
‘int LiquidCrystal_I2C::init()’ is private within this context