Экран 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).
@AFract, 👍5
6 ответов
Лучший ответ:
Это точно баг появился в 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 тоже ;). Итак, вопрос: где это должно быть исправлено?
Ваш код частично содержит
#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()
.
Я невероятно новичок в Arduino (буквально я получил один несколько часов назад, и я все еще нахожусь с ним!), поэтому примите это во внимание, обдумывая все, что я говорю, однако я склонен согласиться с тем, что это может быть проблема с 1.6.6 IDE.
У меня были почти такие же симптомы на ЖК-дисплее Freematics MEGA2560/3,2" SSD1289 с использованием библиотеки MultiLCD с использованием 1.6.6. Основываясь на вашем комментарии выше, я удалил и вместо этого установил 1.6.5, перекомпилировал и загрузил, и теперь он отображается правильно...
Здравствуйте, большое спасибо за подтверждение поведения, которое я видел. У меня еще не было времени искать другие решения, такие как предложение jwpat7., @AFract
Я попробовал решение, описанное AFract, и оно решило проблему. (извините, я не смог ответить на его комментарий, потому что у меня недостаточно репутации.)
Я получил новую библиотеку LiquidCrystal_I2C здесь: https://github.com/marcoschwartz/LiquidCrystal_I2C
Информация о фиксации кода находится здесь: https://github.com/marcoschwartz/LiquidCrystal_I2C/pull/5
У меня была такая же проблема, выпущенная в версиях 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
У меня была такая же проблема. Мой LCD показывал только один символ. Я загрузил и попробовал множество библиотек ЖК-дисплеев, и в итоге в моей среде IDE было установлено множество библиотек. После нескольких дней попыток решить проблему я решил очистить свою IDE, удалив каталог библиотек (помните, что IDE может взять их из папки document/arduino/library). После этого я протестировал одну за другой ЖК-библиотеки. В случае, если это не сработало, я удалил его. Тот, который был опубликован выше, https://github.com/marcoschwartz/LiquidCrystal_I2C работал!!. Я действительно не знаю, где был точно проблема, возможно конфликт между установленными библиотеками.
- ЖК-дисплей I2C отображает странные символы
- 16/2 arduino I2C ЖК-дисплей не загорается?
- Альтернатива LCD-дисплеям UART/I2C?
- Отправка буквы за буквой на ЖК-дисплей, однако дисплей знает полную строку?
- Датчики I2C не работают при подключении к LCD дисплею 20X04
- Проблема стабильности кода прерываний, связанного с датчиком расхода
- проблемы с кодированием
- Проблемы с подключением ЖК-дисплея I2C
Здравствуйте и спасибо за ваш ответ. Код, который я предоставил, ранее работал, ваша библиотека LiquidCrystal_I2C должна отличаться, если у вас совсем не такой же ctor, как у меня. Но я попробую с вашим, чтобы посмотреть, решит ли мою проблему., @AFract