Товарищи, прошу вашей помощи. У меня какие-то косяки с дисплеем LCD 2004. Не отображается ряд пикселей в 3-й строке (ранее вообще половина дисплея ничего не отображала, поджимал контакты, вроде взлетело, но через день стало как на фото). Можно как-то в 3-й строке шрифт на один пиксель уменьшить (может как-то в библиотеке можно поправить или перерисовать)? Буду очень признателен за советы. Проект не мой исходники брал здесь https://github.com/AlexGyver/PCdisplay. Папка firmware, файл PCdisplay_v1.6.
Запустите какой нить тестовый скетч коих много в сети-там посмотрите. Например этот Код (Text): #include <LiquidCrystalRus.h> LiquidCrystalRus disp(6, 7, 2, 3, 4, 5); // создаем объект void setup() { disp.begin(20, 4); // инициализируем дисплей 4 строки по 20 символов disp.print("абвгдеёжзийклмнопрст"); disp.print("АБВГДЕЁЖЗИЙКЛМНОПРСТ"); disp.print("уфхцчшщьыьэюя "); disp.print("УФХЦЧШЩЫЬЭЮЯ "); } void loop() { }
Дисплей с браком - это точно, нужно программным способом опустить (перерисовать) третью строку или уменьшить весь шрифт в принципе (или еще какой-то вариант) . В коде разбираюсь плохо, на форуме автора не подсказали, пришел за помощь к Вам.
@dz03330, попробуйте снять металлическую рамку экрана, аккуратно разобрать на основную плату и ЖК экран, протереть контакты на основной плате под токопроводящей резинкой и также аккуратно собрать назад.
Достать дисплей не сломав всей конструкции я уже не смогу. Пробовал перерисовать символы, но в такое ощущение что в памяти дисплея может только 8 самописных символов храниться. И если это так - явно не подходит, тут только кейс для "уменьшенных" цифр будет 9 знаков содержать. Обратил внимание, что при стандартном выводе нижний ряд пиксей пропускается. Есть идее как сместить? (то есть пропустить не нижний ряд, а верхний). Или кто-то знает как подсунуть свои шрифты в библиотеку?
В документации на дисплей говорится тоже самое - только 8 пользовательских символов. ;-). Библиотеки-русификаторы обычно прямо на ходу подсовывают пользовательские символы на экран поэтому если вы их выведете не 8 а 9 то один из символов задвоится.
Именно поэтому придерживаюсь правила - всё многоногое - на панельках. Можно (плюс к предыдущему) немного сплющить резинку по толщине, слегка зажав между двумя пластинами. Она по высоте чуть раздастся и прилегать будет лучше. Но аккуратно - резинки довольно дефицитны.
Спасибо! с контактами разобрался. Дисплей показывает. Сможет по коду подсказать? Есть надпись "нет сигнала" и ее съедает pac-man. Подскажите как такой цикл правильно написать? void timeoutTick() { if ((millis() - timeout > 5000)) { lcd.clear(); } while (Serial.available() < 1){ if ((millis() - timeout > 5000) && timeOut_flag) { if(restoreConnectToPC) { reDraw_flag=1; restoreConnectToPC=0; if (reDraw_flag) { lcd.clear(); reDraw_flag = 0;} } lcd.createChar(1, symbol[7]); // г lcd.createChar(2, symbol[1]); // и lcd.createChar(3, symbol[2]); // н lcd.createChar(4, symbol[6]); // л lcd.createChar(5, symbol[4]); // т lcd.createChar(6, pac_man[0]); // открыт lcd.createChar(7, pac_man[1]); // закрыт lcd.setCursor(5, 1); lcd.print("He\5 c\2\1\3a\4a"); reDraw_flag = 0; updateDisplay_flag = 1; timeOutLCDClear = 1; if(timeOutLCDClear) {reDraw_flag = 1;} if (!ERROR_BACKLIGHT) lcd.noBacklight(); }} }
купил новый. Но старый оживили, зажал с правого угла (чтобы все загорелось), зафиксировал струбциной и залил поксиполом, но получилось страшненько и в мою коробочку уже не влезал.
void timeoutTick() { if ((millis() - timeout > 5000)) lcd.clear(); while (Serial.available() < 1){ if ((millis() - timeout > 5000) && timeOut_flag) { if(restoreConnectToPC) { reDraw_flag=1; restoreConnectToPC=0; if (reDraw_flag) { lcd.clear(); reDraw_flag = 0;} } reDraw_flag = 0; updateDisplay_flag = 1; timeOutLCDClear = 1; if(timeOutLCDClear) {reDraw_flag = 1;} if (!ERROR_BACKLIGHT) lcd.noBacklight(); lcd.createChar(1, symbol[7]); // г lcd.createChar(2, symbol[1]); // и lcd.createChar(3, symbol[2]); // н lcd.createChar(4, symbol[6]); // л lcd.createChar(5, symbol[4]); // т lcd.createChar(6, pac_man[0]); // открыт lcd.createChar(7, pac_man[1]); // закрыт lcd.setCursor(5, 1); lcd.print("He\5 c\2\1\3a\4a"); delay(8000); for (byte i = 1; i < 18; i++){ lcd.setCursor(i, 1); lcd.print("\6"); delay(500); lcd.setCursor(i, 1); lcd.print(" "); lcd.setCursor(i+1, 1); lcd.print("\7"); delay(500); lcd.setCursor(i+1, 1); lcd.print(" ");} }} }