Экран LCD 16*02 I2C показывает только первый напечатанный символ

У меня есть ЖК-экран I2C, поставляемый с комплектом Sunfounder и, безусловно, построенный DFRobot или подобным конструктором (на ЖК-дисплее ничего не написано), и копия Arduino Uno R3.

Моя проблема заключается в том, что когда я использую lcd.print() для записи строки на ЖК-дисплей, печатается только первый символ строки. Я могу печатать только на других позициях, используя setCursor, но только по одному символу за раз.

Я пытался изменить библиотеки (https://github.com/fdebrabander/Arduino- LiquidCrystal-I2C-библиотека, поставляемая с ЖК-дисплеем...), она всегда ведет себя одинаково!

Например, вот очень упрощенная программа, демонстрирующая такое поведение:

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);
// установить адрес ЖК-дисплея на 0x27 для 16-символьного и 2-строчного дисплея
void setup() {
  lcd.init();
  lcd.backlight();
}

void loop() {
  lcd.print("write");
  delay(1000);
  lcd.setCursor(10, 0);
  lcd.print("p10");
  lcd.setCursor(0, 1);
  lcd.print("0, 1 write");
  if((millis() / 1000) % 5 == 0) {
    lcd.clear();
    delay(1000);
  }
}

Я получаю что-то вроде:

w      p   
0w         

На экране (конечно, до того, как произойдет clear()).

Вместо чего-то вроде:

write  p10      
0, 1 writewrite

Некоторое время назад ЖК-дисплей был в порядке. Единственное, о чем я мог подумать, это то, что я недавно обновился до Arduino 1.6.6. Может это ошибка в компиляторе?

Привет, мир от DFRobot также не работает должным образом (опять же, только первый символ) (обратите внимание, чтобы он отображал что-то на моем ЖК-дисплее, мне нужно изменить адрес с 0x20 на 27).

, 👍5


6 ответов


Лучший ответ:

4

Это точно баг появился в 1.6.6. Для справки см. https:/ /blog.arduino.cc/2015/11/03/arduino-ide-1-6-6-released-and-available-for-download/#comment-278766 https://forum.arduino.cc/index.php?topic=359652.0 http://forum.arduino.cc/index.php?topic=357312.msg2476987#msg2476987

Последняя ссылка, похоже, предоставляет решение с помощью обновленной версии LCD I2C lib: https://github .com/marcoschwartz/LiquidCrystal_I2C (еще не пробовал).

По мнению некоторых людей, версия 1.6.6 немного запутана, но и библиотека I2C тоже ;). Итак, вопрос: где это должно быть исправлено?

,

3

Ваш код частично содержит

#include <LiquidCrystal_I2C.h>
....
LiquidCrystal_I2C lcd(0x27, 16, 2); // установить адрес ЖК-дисплея на 0x27 для 16-символьного и 2-строчного дисплея
void setup() {
  lcd.init();
  lcd.backlight();
}

Для всех конструкторов в LiquidCrystal_I2C.h в моей системе вторым и третьим параметрами являются EN и RW, т. е. включить и прочитать / записать номера контакта. Они не определяют размер дисплея.

Я предлагаю попробовать использовать конструктор, например

LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7); // 0x27 — адрес шины I2C для немодифицированного рюкзака

и вместо lcd.init(); скажите

lcd.begin (16,2); // для ЖК-модуля 16 x 2

Обратите внимание, lcd.begin() вызовет init().

,

Здравствуйте и спасибо за ваш ответ. Код, который я предоставил, ранее работал, ваша библиотека LiquidCrystal_I2C должна отличаться, если у вас совсем не такой же ctor, как у меня. Но я попробую с вашим, чтобы посмотреть, решит ли мою проблему., @AFract


2

Я невероятно новичок в Arduino (буквально я получил один несколько часов назад, и я все еще нахожусь с ним!), поэтому примите это во внимание, обдумывая все, что я говорю, однако я склонен согласиться с тем, что это может быть проблема с 1.6.6 IDE.

У меня были почти такие же симптомы на ЖК-дисплее Freematics MEGA2560/3,2" SSD1289 с использованием библиотеки MultiLCD с использованием 1.6.6. Основываясь на вашем комментарии выше, я удалил и вместо этого установил 1.6.5, перекомпилировал и загрузил, и теперь он отображается правильно...

,

Здравствуйте, большое спасибо за подтверждение поведения, которое я видел. У меня еще не было времени искать другие решения, такие как предложение jwpat7., @AFract


2

Я попробовал решение, описанное AFract, и оно решило проблему. (извините, я не смог ответить на его комментарий, потому что у меня недостаточно репутации.)

Я получил новую библиотеку LiquidCrystal_I2C здесь: https://github.com/marcoschwartz/LiquidCrystal_I2C

Информация о фиксации кода находится здесь: https://github.com/marcoschwartz/LiquidCrystal_I2C/pull/5

,

2

У меня была такая же проблема, выпущенная в версиях 1.6.7 и 1.6.8. Я решил это с помощью новой библиотеки marcoschwartz, указанной в других ответах.

Ранее я использовал ту же библиотеку DFRobot, которая отлично работала в среде IDE 1.6.0, пока я не обновился до версии 1.6.7.

,

Добро пожаловать на стековую биржу Arduino. Ответы «Спасибо» и «Я тоже» на самом деле не считаются полезными (http://meta.stackexchange.com/questions/256378/are-me-too-answers-considered-a-noisy-answer-detailed-in- FAQ). В вашем случае вы даете интересную информацию, но имейте это в виду. Вы должны добавлять ответ только в том случае, если он отличается от другого ответа и действительно ответит на вопрос., @Paul


1

У меня была такая же проблема. Мой LCD показывал только один символ. Я загрузил и попробовал множество библиотек ЖК-дисплеев, и в итоге в моей среде IDE было установлено множество библиотек. После нескольких дней попыток решить проблему я решил очистить свою IDE, удалив каталог библиотек (помните, что IDE может взять их из папки document/arduino/library). После этого я протестировал одну за другой ЖК-библиотеки. В случае, если это не сработало, я удалил его. Тот, который был опубликован выше, https://github.com/marcoschwartz/LiquidCrystal_I2C работал!!. Я действительно не знаю, где был точно проблема, возможно конфликт между установленными библиотеками.

,