ж/к дисплей WH1601 и LiquidCrystal_I2C.h

alexlord
Offline
Зарегистрирован: 31.10.2016

Добрый день. Попались мне от кассы дисплейчики однострочные. Они организованы как две строки по 8символов. Библиотека LiquidCrystal_I2C.h этого не понимает или я не догоняю. При прямом подключении через библиотеку LiquidCrystalRus.h  все работает.... а через I2C адаптер только 8 символов. Может кто уже побеждал сию проблему подскажите плиз!!! 

b707
Offline
Зарегистрирован: 26.05.2017

alexlord пишет:

Добрый день. Попались мне от кассы дисплейчики однострочные. Они организованы как две строки по 8символов.

так однострочные или 2 строки? :)

По делу - сравните исходный код обоих библиотек в плане работы с символами... думаю. найдете причину

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

alexlord пишет:

дисплейчики однострочные ... организованы как две строки по 8символов

Глубокомысленно! Два дисплейчика что ли?

arduinec
Offline
Зарегистрирован: 01.09.2015

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

alexlord пишет:

дисплейчики однострочные ... организованы как две строки по 8символов

Глубокомысленно! Два дисплейчика что ли?

Память во всех видах данных дисплеев организована как 2 строки по 40 ячеек.
В этом экземпляре расположены подряд по 8 первых ячеек от каждой строки.

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

Говорю ж, глубокомысленно! 

arduinec
Offline
Зарегистрирован: 01.09.2015

alexlord пишет:

Добрый день. Попались мне от кассы дисплейчики однострочные. Они организованы как две строки по 8символов. Библиотека LiquidCrystal_I2C.h этого не понимает или я не догоняю. При прямом подключении через библиотеку LiquidCrystalRus.h  все работает.... а через I2C адаптер только 8 символов. Может кто уже побеждал сию проблему подскажите плиз!!! 

Скорее всего его нужно определить как 8 на 2: LiquidCrystal_I2C lcd(0x3F, 8, 2);
и обращаться к каждой половине как к отдельной строке.
 

alexlord
Offline
Зарегистрирован: 31.10.2016

Дисплей однострочный... но организован как 2 по 8....  http://mk90.blogspot.ru/2010/05/lcd.html

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

alexlord
Offline
Зарегистрирован: 31.10.2016
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x3f,16,2);  // set the LCD address to 0x27 for a 16 chars and 2 line display

void setup()
{
  lcd.init();                      // initialize the lcd 
  lcd.backlight();
}

void loop()
{
    delay(100);
    // clear the screen
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("abcdefghABCDEFGH");
    lcd.setCursor(0,1);
    lcd.print("0123456789");
    


}

  в LiquidCrystal_I2C lcd(0x3F, 8, 1);    16,1     20,1      работает но выводит только первые в символов

а   LiquidCrystal_I2C lcd(0x3F, 8, 2);     16,2   20,2       ниче не показывает

засада.

arduinec
Offline
Зарегистрирован: 01.09.2015

lcd.init(); как раз и задаёт одну строку, для двух строк нужен lcd.begin();

alexlord
Offline
Зарегистрирован: 31.10.2016

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

LiquidCrystal_I2C lcd(0x3f,16,1);  // set the LCD address to 0x27 for a 16 chars and 2 line display

void setup()
{
  
  lcd.begin(16,2);
  lcd.init();                      // initialize the lcd 
}

void loop()
{
    delay(100);
    // clear the screen
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("abcdefghABCDEFGH");
    lcd.setCursor(0,1);
    lcd.print("0123456789");
    


}

ну без  lcd.init(); не работает...

 lcd.begin(16,2);   смена аргументов не помогает. по прежнему 8 символов.

 

arduinec
Offline
Зарегистрирован: 01.09.2015

alexlord пишет:

ну без  lcd.init(); не работает...
lcd.begin(16,2);   смена аргументов не помогает. по прежнему 8 символов.

Не тормози - сникерсни!

LiquidCrystal_I2C lcd(0x3F,8,2);
 
void setup()
{
  lcd.begin();
}

 

alexlord
Offline
Зарегистрирован: 31.10.2016
сникерс уже съел.... второй час ночи...
 
я так пробовал, без аргументов вылетает ошибка.
 
LiquidCrystal_I2C/LiquidCrystal_I2C.h:58:8: note: void LiquidCrystal_I2C::begin(uint8_t, uint8_t, uint8_t)
 
   void begin(uint8_t cols, uint8_t rows, uint8_t charsize = LCD_5x8DOTS );
 
        ^
 
C:\Users\Администратор\Documents\Arduino\libraries\LiquidCrystal_I2C/LiquidCrystal_I2C.h:58:8: note:   candidate expects 3 arguments, 0 provided
 
exit status 1
no matching function for call to 'LiquidCrystal_I2C::begin()'
alexlord
Offline
Зарегистрирован: 31.10.2016

По идее дисплею пофиг что в LiquidCrystal_I2C lcd(0x3f,20,4) написано про строки и столбцы... это для удобства вывода. Почему перестает работать при указании строк более 1...?

arduinec
Offline
Зарегистрирован: 01.09.2015

arduinec пишет:

alexlord пишет:

ну без  lcd.init(); не работает...
lcd.begin(16,2);   смена аргументов не помогает. по прежнему 8 символов.

Не тормози - сникерсни!

LiquidCrystal_I2C lcd(0x3F,8,2);
 
void setup()
{
  lcd.begin();
}

В старой версии LiquidCrystal_I2C всё работало именно так. В новой версии как всегда намудрили (поставил её для проверки).

На моём дисплее 1602 нижеприведённый код нормально работает:

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

LiquidCrystal_I2C lcd(0x3F,8,2);

void setup()
{
  lcd.init();
  lcd.backlight();
  lcd.setCursor(0,0);
  lcd.print("abcdefghABCDEFGH");
  lcd.setCursor(0,1);
  lcd.print("0123456789");
}

void loop() {}

 

arduinec
Offline
Зарегистрирован: 01.09.2015

alexlord пишет:

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

LiquidCrystal_I2C lcd(0x3f,16,2);  // set the LCD address to 0x27 for a 16 chars and 2 line display

void setup()
{
  lcd.init();                      // initialize the lcd 
  lcd.backlight();
}

void loop()
{
    delay(100);
    // clear the screen
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("abcdefghABCDEFGH");
    lcd.setCursor(0,1);
    lcd.print("0123456789");
}

Зачем lcd.clear(); стоит в loop() ?

alexlord
Offline
Зарегистрирован: 31.10.2016

Подключил 2004.... все показывает и пофиг чего в LiquidCrystal_I2C lcd(0x3F,8,2) написаносколько строк и столбцов... бардак но выводит. Есть еще 1601 завтра его подключу вторым экземпляром класса прямым подключением и посмотрю что выйдет.

alexlord
Offline
Зарегистрирован: 31.10.2016

чистит экран от мусора..... :).
 

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3f,8,2);   // Задаем адрес и размерность дисплея. 


void setup()
{
  
   
  lcd.init();                            // Инициализация lcd             
  lcd.backlight();
  
  lcd.setCursor(1,0);              // Устанавливаем курсор в начало 1 строки
  lcd.print("PRIVET");    // Выводим текст, 
 delay(5000); 
}

void loop()
{

  lcd.setCursor(0,0);              // Устанавливаем курсор в начало 1 строки
  lcd.print("AAAAAAAAAAAAAAAAAAAA");    // Выводим текст, 
  delay(500);
  lcd.setCursor(0,1);              // Устанавливаем курсор в начало 1 строки
  lcd.print("BBBBBBBBBBBBBBBBBBBB");    // Выводим текст, 
  delay(500);
  lcd.setCursor(0,2);              // Устанавливаем курсор в начало 1 строки
  lcd.print("CCCCCCCCCCCCCCCCCCCC");    // Выводим текст, 
  delay(500);
  lcd.setCursor(0,3);              // Устанавливаем курсор в начало 2 строки
  lcd.print("DDDDDDDDDDDDDDDDDDDD"); // Выводим текст, 
  delay(500);
  lcd.clear();
}       

   от этого скетча осталась строка.