Ардуино и LCD дисплей с I2C

Иван_123
Offline
Зарегистрирован: 17.01.2018

Здравствуйте! С Ардуино знаком недавно, заказал на али китайский аналог и набор, в котором также был модуль LCD1602 и отдельно I2C. Припаял I2C. Попробовал подключить этот экран... и столкнулся с проблемой: никак не мог вывести на него текст, верхний ряд высвечивался квадратами и на скетчи не реагировал. В инете очень много аналогичных проблем. Менял библиотеки, узнал реальный адрес с помощью сканера, перепаивал и все-таки немного продвинулся: теперь в первом столбце, то есть в начале первой строки и в начале второй появляются буквы, с которых начинаются слова. Продолжения этих слов попросту нет. Так как в интернете нет аналогичных ситуаций, плюс у меня уже кончились идеи, решил спросить совета здесь. 

Вот скетч, который залил:

#include <Wire.h> // библиотека для управления устройствами по I2C 
#include <LiquidCrystal_I2C.h> // подключаем библиотеку для LCD 1602
 
LiquidCrystal_I2C lcd(0x3F,20,2); // присваиваем имя lcd для дисплея 20х2
 
void setup() // процедура setup
{
  lcd.init();
  lcd.backlight(); // включение подсветки дисплея
   
  lcd.setCursor(0,0); // ставим курсор на 1 символ первой строки
  lcd.print("S LOVE"); // печатаем сообщение на первой строке
  
  lcd.setCursor(0,1);  // ставим курсор на 1 символ второй строки
  lcd.print("ARDUINO"); // печатаем сообщение на второй строке
}
 
void loop() // процедура loop
{
 
/* это многострочный комментарий
 
// изначально процедура void loop() в скетче не используется
lcd.noDisplay(); // выключаем подсветку LCD дисплея
delay(500); // ставим паузу
lcd.display(); // включаем подсветку LCD дисплея
delay(500); // ставим паузу
 
*/
}
 
 
Итак, спрашивайте, если ситуация не ясна. Что это может быть? Вряд ли непропай, уже перепаял, да и буквы ведь все таки вылазят, хоть и не все. Одним словом, помогите)
DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Здесь на форуме есть решения, ищите. Одно из них описал лично я.

Иван_123
Offline
Зарегистрирован: 17.01.2018

Ах да, в этом примере в начале верхней строки на дисплее выводится "S" , а в начале нижней "A". И больше ничего

Иван_123
Offline
Зарегистрирован: 17.01.2018

Именно такой ситуации?

Иван_123
Offline
Зарегистрирован: 17.01.2018
Глянь в *.cpp-файле библиотеки:
 
1
inline size_t LiquidCrystal_I2C::write(uint8_t value) {
2
    send(value, Rs);
3
    return 1;
4
}
Если там не return 1 - поставь как выше, мне в своё время этот косяк крови попил. Но не факт, что именно в этом дело.
 
Вот Ваш ответ. И для меня это ну очень непонятно, мягко говоря.
Иван_123
Offline
Зарегистрирован: 17.01.2018

Скажите хотя бы как правильно открыть файл с расширением cpp, в этой ситуации.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Иван_123 пишет:

Глянь в *.cpp-файле библиотеки:
 
1
inline size_t LiquidCrystal_I2C::write(uint8_t value) {
2
    send(value, Rs);
3
    return 1;
4
}
Если там не return 1 - поставь как выше, мне в своё время этот косяк крови попил. Но не факт, что именно в этом дело.
 
Вот Ваш ответ. И для меня это ну очень непонятно, мягко говоря.

Откройте исходники библиотеки и найдите там описанное. Поправьте, как сказано. Дело двух минут.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Иван_123 пишет:

Скажите хотя бы как правильно открыть файл с расширением cpp, в этой ситуации.

В любом текстовом редакторе, например, в Notepad++.

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015

Пишите что экран 1602 а инициализируете как 2002 может в этом косяк?

Иван_123
Offline
Зарегистрирован: 17.01.2018

Извините, я ведь новичок в этом деле. Спасибо за помощь, ведь действительно заработало. Посидел, немного потупил и вуаля. Спасибо еще раз:)

Иван_123
Offline
Зарегистрирован: 17.01.2018

Как же вы это нашли? Удивительно

Иван_123
Offline
Зарегистрирован: 17.01.2018

Этот косяк в библиотеке

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015

https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library

Давно уже все поправлено, качайте библиотеки с первоисточников.

Иван_123
Offline
Зарегистрирован: 17.01.2018

Первоисточников? Набирал в поисковике подключение LCD к ардуино, и первые 20 сайтов, по сути, являющихся самыми популярными, облазил полностью. Загружал с каждого библиотеки:). Знать бы, где эти первоисточники, и я только рад был бы оттуда качать.

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

Иван_123 пишет:

Как же вы это нашли? Удивительно

ничего удивительного, не все, как Вы, " новичок в этом деле". Метод write тянется от класса Stream и даже от его родителя и всегда обязан возвращать количество выведенных данных. Это так во всех реализациях потоков от микроконтроллеров до суперкомпьютеров - это общее место. А в этой библиотеке, его вывод используется для подсчёта позиции следующего символа. Вот и вся удивительность. Грамотный человек это найдёт достаточно быстро, что мы и наблюдаем.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Иван_123 пишет:

Первоисточников? Набирал в поисковике подключение LCD к ардуино, и первые 20 сайтов, по сути, являющихся самыми популярными, облазил полностью. Загружал с каждого библиотеки:). Знать бы, где эти первоисточники, и я только рад был бы оттуда качать.

Нужно как миниум знать программу, с которой вы работаете. Доступ к большинству библиотек есть прямо в среде arduino ide,  Скетч- подключить библиотеку -управлять библиотеками - в поиске вбить LCD