Ошибка с примером из библиотеки LCDBitmap.

Oreshek
Oreshek аватар
Offline
Зарегистрирован: 19.04.2020

Добрый вечер.

Может кто знаком с библиотекой LCDBitmap, или у кого была такая ошибка?

Компилятор выдаёт ошибку при загрузке примера из библиотеки LCDBitmap.

Попытки что исправить НИ к чему НИ привели.

При попытке загрузить следующий скетч из примеров этой либы:

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <LCDBitmap.h>

LiquidCrystal_I2C lcd(0x27, 16, 2); 
LCDBitmap bitmap(&lcd, 12, 0);  // Assign the LCD bitmap to "&lcd" set in the previous line and set display location to (12,0)

unsigned long currentMillis;  // Timer variable
const int sample = 4000;  // Sets how long to run each sample

void setup() {
  lcd.begin(16,2);  // Initialize the LCD 
  bitmap.begin();  // Initalize the LCD bitmap
  bitmap.home();  // Move cursor the home position (0,0)
  lcd.print("LCDBitmap");  
  randomSeed(analogRead(A0));
}

void loop() {
  // bitmap.pixel
  lcd.setCursor(0, 1);
  lcd.print(".pixel   ");
  currentMillis = millis();
  while(millis()-currentMillis<sample) {
    for (byte i=0; i<8; i++) {
      bitmap.pixel(random(0, BITMAP_W), random(0, BITMAP_H), random(0, 2), NO_UPDATE);  // Add one random pixel but don't update bitmap display
    }
    bitmap.update();  // 8 pixels positioned, now update bitmap display
  }

  // bitmap.line sample #1
  lcd.setCursor(0, 1);
  lcd.print(".line #1 ");
  bitmap.clear();  // Clear the bitmap display (automatically updates bitmap display) doesn't clear text
  currentMillis = millis();
  int startdelay=120;
  while(millis()-currentMillis<sample*2) {
    for (byte x=0; x<BITMAP_W; x=x+2) {
      bitmap.line(x, 0, BITMAP_W-x-1, BITMAP_H-1, ON, UPDATE);  // Draw the line from (x, 0) to (BITMAP_W-x-1, BITMAP_H-1) and update bitmap display
      delay(startdelay);
      bitmap.clear();  // Clear the display
    }
    for (byte y=0; y<BITMAP_H; y=y+2) {
      bitmap.line(0, BITMAP_H-y-1, BITMAP_W-1, y, ON, UPDATE);
      delay(startdelay);
      bitmap.clear();  // Clear the display
    }
    startdelay=startdelay*2/3;
  }

  // bitmap.line sample #2
  lcd.setCursor(0, 1);
  lcd.print(".line #2 ");
  currentMillis = millis();
  while(millis()-currentMillis<sample) {
    for (byte x=0; x<BITMAP_W; x++) {
      bitmap.line(x, 0, x, BITMAP_H-1, ON, UPDATE);  // Draw the line from (x, 0) to (x, BITMAP_H-1) and update bitmap display
    }
    for (byte y=0; y<BITMAP_H; y++) {
      bitmap.line(0, y, BITMAP_W-1, y, OFF, UPDATE);
    }
  }
  bitmap.clear();  // Clear the display

  // bitmap.rect
  lcd.setCursor(0, 1);
  lcd.print(".rect    ");
  currentMillis = millis();
  while(millis()-currentMillis<sample) {
    bitmap.rect(random(0, BITMAP_W), random(0, BITMAP_H), random(0, BITMAP_W), random(0, BITMAP_H), ON, UPDATE);  // Draw a rectangle from (x1,y1) to (x2,y2) and update bitmap display
    delay(150);
    bitmap.clear();  // Clear the display
  }

  // bitmap.rectFill
  lcd.setCursor(0, 1);
  lcd.print(".rectFill");
  currentMillis = millis();
  while(millis()-currentMillis<sample*1.5) {
    bitmap.rectFill(random(0, BITMAP_W), random(0, BITMAP_H), random(0, BITMAP_W), random(0, BITMAP_H), ON, NO_UPDATE);  // Draw a filled rectangle from (x1,y1) to (x2,y2) and update bitmap display
    bitmap.rectFill(random(0, BITMAP_W), random(0, BITMAP_H), random(0, BITMAP_W), random(0, BITMAP_H), OFF, NO_UPDATE);  // Draw a filled rectangle from (x1,y1) to (x2,y2) and update bitmap display
    bitmap.update();  // Filled rectangles drawn, now update bitmap display
    delay(10);
  }
  bitmap.clear();  // Clear the display

  // bitmap.barGraph
  lcd.setCursor(0, 1);
  lcd.print(".barGraph ");
  byte bars=10;
  byte graph[bars];  // 10 Bar graph values
  currentMillis = millis();
  while(millis()-currentMillis<sample*2) {
    for (byte x=0; x<bars; x++) {
      graph[x] = random(0, BITMAP_H);  // Fill array with random height values
    }
    bitmap.barGraph(bars, graph, ON, UPDATE);  // Display the bar graph
    delay(10);
    if (bars==10 && millis()-currentMillis>=sample) bars=4;
  }
  bitmap.clear();  // Clear the display

  // This creates a big "X" using the LCDBitmap to show the inverse and move functions
  for (byte x=0; x<=4; x++) {
    bitmap.line(x, BITMAP_H-1, x+BITMAP_H-1, 0, ON, NO_UPDATE);  // Draw a line, but don't update the bitmap display
    bitmap.line(x, 0, x+BITMAP_H-1, BITMAP_H-1, ON, NO_UPDATE);  // Draw a line, but don't update the bitmap display
  }
  bitmap.update();  // Now that everything is written to the bitmap, show the changes

  // bitmap.inverse
  lcd.setCursor(0, 1);
  lcd.print(".inverse ");
  delay(1000);
  int x_status = 1;
  currentMillis = millis();
  while(millis()-currentMillis<sample/2) {
    for (byte a=0; a<6; a++) {
      bitmap.inverse();  // Invert the bitmap, automatically updates the bitmap display
      x_status *= -1;
      delay(75);
    }
  }
  if (x_status==-1) bitmap.inverse();

  // bitmap.move
  bitmap.clear_text();  // Clear just the text on the display (leaves bitmap alone)
  lcd.setCursor(0, 1);
  lcd.print(".move");
  for (byte x=11; x>4; x--) {
    bitmap.move(x,0);  // Move the LCD bitmap position to the left one position
    delay(150);
  }
  for (byte x=6; x<13; x++) {
    bitmap.move(x,0);  // Move the LCD bitmap position to the right one position
    delay(150);
  }
  bitmap.home();  // Move cursor the home position (0,0)
  lcd.print("LCDBitmap");  
  delay(500);
  
  // bitmap.clear
  lcd.setCursor(0, 1);
  lcd.print(".clear   ");
  delay(1000);
  bitmap.clear();  // Clear the bitmap display only (automatically updates bitmap display) doesn't clear text
  delay(2000);
}

Компилятор ругается на 6 строку кода и выдаёт следующею ошибочку:

Arduino: 1.8.12 (Windows 7), Плата:"ATmega328 based, Old bootloader, External 16 MHz, GyverUART [Warning!], AVR-GCC v8.3.0 [Warning!], Enable [Default], Enable [Default], Disable, 2.7V [Default], Disable [Default]"

LCDBitmap_NewLCD_I2C:6:29: error: no matching function for call to 'LCDBitmap::LCDBitmap(LiquidCrystal_I2C*, int, int)'
 LCDBitmap bitmap(&lcd, 12, 0);  // Assign the LCD bitmap to "&lcd" set in the previous line and set display location to (12,0)
                             ^
In file included from S:\Users\AE0E~1\AppData\Local\Temp\arduino_modified_sketch_308661\LCDBitmap_NewLCD_I2C.pde:3:
S:\Users\�������� ����\Documents\Arduino\libraries\LCDBitmap/LCDBitmap.h:126:3: note: candidate: 'LCDBitmap::LCDBitmap(LiquidCrystal*, byte, byte)'
   LCDBitmap (LiquidCrystal *lcd, byte bitmap_x, byte bitmap_y);
   ^~~~~~~~~
S:\Users\�������� ����\Documents\Arduino\libraries\LCDBitmap/LCDBitmap.h:126:3: note:   no known conversion for argument 1 from 'LiquidCrystal_I2C*' to 'LiquidCrystal*'
S:\Users\�������� ����\Documents\Arduino\libraries\LCDBitmap/LCDBitmap.h:121:7: note: candidate: 'constexpr LCDBitmap::LCDBitmap(const LCDBitmap&)'
 class LCDBitmap {
       ^~~~~~~~~
S:\Users\�������� ����\Documents\Arduino\libraries\LCDBitmap/LCDBitmap.h:121:7: note:   candidate expects 1 argument, 3 provided
S:\Users\�������� ����\Documents\Arduino\libraries\LCDBitmap/LCDBitmap.h:121:7: note: candidate: 'constexpr LCDBitmap::LCDBitmap(LCDBitmap&&)'
S:\Users\�������� ����\Documents\Arduino\libraries\LCDBitmap/LCDBitmap.h:121:7: note:   candidate expects 1 argument, 3 provided
S:\Users\AE0E~1\AppData\Local\Temp\arduino_modified_sketch_308661\LCDBitmap_NewLCD_I2C.pde: In function 'void setup()':
LCDBitmap_NewLCD_I2C:12:17: error: no matching function for call to 'LiquidCrystal_I2C::begin(int, int)'
   lcd.begin(16,2);  // Initialize the LCD
                 ^
In file included from S:\Users\AE0E~1\AppData\Local\Temp\arduino_modified_sketch_308661\LCDBitmap_NewLCD_I2C.pde:2:
S:\Users\�������� ����\Documents\Arduino\libraries\Arduino-LiquidCrystal-I2C-library-master/LiquidCrystal_I2C.h:76:7: note: candidate: 'void LiquidCrystal_I2C::begin()'
  void begin();
       ^~~~~
S:\Users\�������� ����\Documents\Arduino\libraries\Arduino-LiquidCrystal-I2C-library-master/LiquidCrystal_I2C.h:76:7: note:   candidate expects 0 arguments, 2 provided
Несколько библиотек найдено для "LiquidCrystal_I2C.h"
 Используется: S:\Users\Интернет урок\Documents\Arduino\libraries\Arduino-LiquidCrystal-I2C-library-master
Не используется: S:\Users\Интернет урок\Documents\Arduino\libraries\LCD_1602_RUS_ALL-master
exit status 1
no matching function for call to 'LCDBitmap::LCDBitmap(LiquidCrystal_I2C*, int, int)'

Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"

Помогите пожалуйста.

 

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

А Вас не наводят на размышления странные знаки в отчете?

S:\Users\�������� ����\Documents\Arduino\libraries\LCDBitmap/LCDBitmap.h:126:3: note:

Имя пользователя должно быть латинскими буквами или ставьте библиотеку в нормальную директорию без русских букв

Oreshek
Oreshek аватар
Offline
Зарегистрирован: 19.04.2020

А так у меня все библиотеки в этой директории стоят, и ни чё

С остальными библами же всё работает,

И это ошибка где то в самой библиотеке

Oreshek
Oreshek аватар
Offline
Зарегистрирован: 19.04.2020

Oreshek пишет:

Плата:"ATmega328 based, Old bootloader, External 16 MHz, GyverUART [Warning!], AVR-GCC v8.3.0 [Warning!], Enable [Default], Enable [Default], Disable, 2.7V [Default], Disable [Default]"

И да я юзаю gyverЯдро))

Но ошибка остаётся даже если компилить со стд ядром.

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Может для начала пример покороче взять? Типа такого

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <LCDBitmap.h>

LiquidCrystal_I2C lcd(0x38);

// Установить LCD изображение на "&lcd", установить положение LCD изображения на позицию символа (0,0).
LCDBitmap bitmap(&lcd, 0, 0);

void setup() 
{
  lcd.begin(16,2); // Сначала необходимо сделать это.
  bitmap.begin();  // Затем инициализируем LCD изображение.
  lcd.setCursor(5, 0);
  lcd.print("LCDBitmap");
}

void loop() 
{
  // Рисуем на изображении несколько вложенных прямоугольников, 
  // не обновляем дисплей изображения до последней команды.
  bitmap.rectFill(0, 0, 19, 15, ON, NO_UPDATE);
  bitmap.rectFill(2, 2, 17, 13, OFF, NO_UPDATE);
  bitmap.rectFill(4, 4, 15, 11, ON, NO_UPDATE);    
  bitmap.rect(6, 6, 13, 9, OFF, UPDATE);

  while(1){}
}

 

kalapanga
Offline
Зарегистрирован: 23.10.2016

Если конкретно по 6 строчке, то библиотеке LCDBitmap скорее всего первый параметр в скобках не нравится. Точнее его тип. lcd у Вас типа LiquidCrystal_I2C, а она небось какой-нибудь LiquidCrystal, описанный в стандартной LiquidCrystal.h, ожидает. Смотрите описание и код библиотеки. Если я прав, её надо править или искать, может кто-то это уже до Вас сделал.

Ну и в остальном порядок навести надо. Нехорошо это: Несколько библиотек найдено для "LiquidCrystal_I2C.h"

А будете часто Гайвера поминать, Вас с вопросами к нему на форум и пошлют!

Oreshek
Oreshek аватар
Offline
Зарегистрирован: 19.04.2020

Да я уже и тип и шмип и чтотолько нИ менял, и где только нИ ковырялся, нИ что нИ помогает.

В библиотеках убрался, оставил только обычную и I2C, не помогает.

Oreshek
Oreshek аватар
Offline
Зарегистрирован: 19.04.2020

mykaida пишет:

Может для начала пример покороче взять? Типа такого

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <LCDBitmap.h>

LiquidCrystal_I2C lcd(0x38);

// Установить LCD изображение на "&lcd", установить положение LCD изображения на позицию символа (0,0).
LCDBitmap bitmap(&lcd, 0, 0);

void setup() 
{
  lcd.begin(16,2); // Сначала необходимо сделать это.
  bitmap.begin();  // Затем инициализируем LCD изображение.
  lcd.setCursor(5, 0);
  lcd.print("LCDBitmap");
}

void loop() 
{
  // Рисуем на изображении несколько вложенных прямоугольников, 
  // не обновляем дисплей изображения до последней команды.
  bitmap.rectFill(0, 0, 19, 15, ON, NO_UPDATE);
  bitmap.rectFill(2, 2, 17, 13, OFF, NO_UPDATE);
  bitmap.rectFill(4, 4, 15, 11, ON, NO_UPDATE);    
  bitmap.rect(6, 6, 13, 9, OFF, UPDATE);

  while(1){}
}

 

Нет, пробовал тоже самое

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

Так вроде ж там всё ясно написано: библиотека ожидает, что ей дадут указатель на объект LiquidCrystal, а Вы пихаете указатель на LiquidCrystal_I2C. Вот она и ругается.

Oreshek пишет:

ошибка где то в самой библиотеке

Да, нет. Передавайте то, что нужно и всё будет в порядке.

Oreshek
Oreshek аватар
Offline
Зарегистрирован: 19.04.2020

Понятно, спасибо.

Просто пример называется 'LCDBitmap NewLCD_I2C',

И это ПРИМЕР и я там нИ чего нИ трогал, всё было писано разрабами.

Oreshek
Oreshek аватар
Offline
Зарегистрирован: 19.04.2020

И да к стати при компиляции с обычным подключением всё компилится.

Хотелось бы что бы и на айтуси всё работало, не подскажите как можно переделать под неё? 

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

Можно посмотреть что именно ему нужно от библиотеки. Может и эта подойдёт. Попробуйте просто нагло преобразовать указатель и посмотреть что получится.

Oreshek
Oreshek аватар
Offline
Зарегистрирован: 19.04.2020

Преобразовать куда? во что?

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

Ну, попробуйте в шестой строке написать 

LCDBitmap bitmap((LiquidCrystal *) & lcd, 12, 0);

Может, на дурочку, и прокатит.

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

А какой битмап вы хотите найти на 1602 ???

Oreshek
Oreshek аватар
Offline
Зарегистрирован: 19.04.2020

Komandir пишет:

А какой битмап вы хотите найти на 1602 ???

Всмысле?

Я нИ какой битмап и нИ искал.

Oreshek
Oreshek аватар
Offline
Зарегистрирован: 19.04.2020

ЕвгенийП пишет:

Ну, попробуйте в шестой строке написать 

LCDBitmap bitmap((LiquidCrystal *) & lcd, 12, 0);

Может, на дурочку, и прокатит.

Прокатило, НО на дисплее очень страшные вещи происходят.

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Насколько я вижу - этот пример для другой библиотеки написан https://bitbucket.org/fmalpartida/new-liquidcrystal/wiki/Home

Oreshek
Oreshek аватар
Offline
Зарегистрирован: 19.04.2020

И даже в таком 

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <LCDBitmap.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); 
LCDBitmap bitmap((LiquidCrystal *) & lcd, 0, 0);
void setup() {
  lcd.begin();
  bitmap.begin();
  lcd.setCursor(5, 0);
  lcd.print("LCDBitmap");
}
void loop() {
  bitmap.rectFill(0, 0, 19, 15, ON, NO_UPDATE);
  bitmap.rectFill(2, 2, 17, 13, OFF, NO_UPDATE);
  bitmap.rectFill(4, 4, 15, 11, ON, NO_UPDATE);   
  bitmap.rect(6, 6, 13, 9, OFF, UPDATE);
  while(1);
}

простом примере, текст выводится, выводится правильно, НО в место символов выводятся по 4 полоски

 

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Вы пытаетесь скрестить ЕЖА с УЖОМ

https://codebender.cc/example/LCDBitmap/LCDBitmap_NewLCD_I2C#LCDBitmap_NewLCD_I2C.ino

 

Oreshek
Oreshek аватар
Offline
Зарегистрирован: 19.04.2020

Сейчас попробую установить  новую ликКрис

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Дисплей то какой ???

Oreshek
Oreshek аватар
Offline
Зарегистрирован: 19.04.2020

1602 c I2C переходником.

С алика

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Имхо - ничего не выйдет.

Oreshek
Oreshek аватар
Offline
Зарегистрирован: 19.04.2020

Я тож так думаю.

Значит буду писать свою библу под себя, давно уже такая мысль была мне эти не очень нравятся, да и с ними не удобно работать и там много багов и всё такое, и хочится чтоб всё в одном было.

Поэтому хочу свою библиотеку написать.

P.S. Если кому интересно все исходники я буду выкладывать на гитхабе https://github.com/Oreshek11/XLCD.h/tree/master

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

Oreshek пишет:
хочится чтоб всё в одном было.

Поэтому хочу свою библиотеку написать.

Ну, раз хочится - пешите :=)

Oreshek
Oreshek аватар
Offline
Зарегистрирован: 19.04.2020

:) очень хочИтся, буду пЕсать)))

Oreshek
Oreshek аватар
Offline
Зарегистрирован: 19.04.2020

Oreshek пишет:

Я тож так думаю.

Значит буду писать свою библу под себя, давно уже такая мысль была мне эти не очень нравятся, да и с ними не удобно работать и там много багов и всё такое, и хочится чтоб всё в одном было.

Поэтому хочу свою библиотеку написать.

P.S. Если кому интересно все исходники я буду выкладывать на гитхабе https://github.com/Oreshek11/XLCD.h/tree/master

К стати ссылка не та, вот https://github.com/Oreshek11/XLCD

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Орешек, ты б вместо того, чтоб никому не нужные библиотеки писать, русский бы свой подтянул, хотя бы с двойки на тройку,  пока самоизолируешься и делать нехрен.

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Дед, может он нарочно придуряется?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Безграмотный от придуряющегося отличается ну очень сильно. Это не тот случай.

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

DetSimen пишет:

Орешек, ты б вместо того, чтоб никому не нужные библиотеки писать..

- Нашел бы королеву

- убил дракона (не одобряю)

- помог 24 странникам

- изучил заклинания (С++)) уровня 90

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Я вот тоже не понимаю, вся молодёжь в игрульки по интернету ринулась на «домосидении», да из всяких соцсетей и ютуб не вылазит, гадость всякую смотрят. За месяц можно не плохо так подтянуться и в хобби и в учебе. 

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

BOOM пишет:

Я вот тоже не понимаю, вся молодёжь в игрульки по интернету ринулась на «домосидении», да из всяких соцсетей и ютуб не вылазит, гадость всякую смотрят. За месяц можно не плохо так подтянуться и в хобби и в учебе. 

Это да. Я научился варить сварочным аппаратом. Пока электродом D3, четверка не прокатывает. Скорее всего у меня руки не оттуда растут.

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Прилипает электрод или что? Если липнет - поддай току, не хватает видимо. 4ку током ампер под 200 варить, но я сам тоже самоучка. 

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

BOOM пишет:

Прилипает электрод или что? Если липнет - поддай току, не хватает видимо. 4ку током ампер под 200 варить, но я сам тоже самоучка. 

Точно, прилипает, но 200А стремался как-то. Попробую.

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

Прожигает, сука, насквозь :(

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Так 4ой не жесть же варят, а по серьезнее металл. ))

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

BOOM пишет:

Прилипает электрод или что? Если липнет - поддай току, не хватает видимо. 4ку током ампер под 200 варить, но я сам тоже самоучка. 

у мня четвёрка на 160А норм варится, не липнет. Электроды наши, местные, но под лицензией ESAB.  Я тоже не профессиональный сварной. 

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

BOOM пишет:

Так 4ой не жесть же варят, а по серьезнее металл. ))

Вы сомневаетесь в моих способностях испортить серьёзный металл?

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Зная себя - ни капли не сомневаюсь ))) Практиковаться просто нужно, практика везде нужна. 
160А для 4ки все же мало (или Вы супер профессионал). Однако ж электроды тоже сильно важный элемент в этом всем.