'class LiquidCrystal_I2C' has no member named 'init'

xfp007
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);
}

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, нету у него init.

Скетч-то, наверное, от другой библиотеки взяли?

Попробуйте вместо init использовать begin, но если скетч от другой библиотеки, там может ещё до фига всего вылезти.

Лучше попробуйте скетчи из примеров своей библиотеки.