Проблема с дисплеем lcd 2004

Тема в разделе "Arduino & Shields", создана пользователем dz03330, 12 окт 2019.

  1. dz03330

    dz03330 Нерд

    Товарищи, прошу вашей помощи. У меня какие-то косяки с дисплеем LCD 2004. Не отображается ряд пикселей в 3-й строке (ранее вообще половина дисплея ничего не отображала, поджимал контакты, вроде взлетело, но через день стало как на фото). Можно как-то в 3-й строке шрифт на один пиксель уменьшить (может как-то в библиотеке можно поправить или перерисовать)? Буду очень признателен за советы. Проект не мой исходники брал здесь https://github.com/AlexGyver/PCdisplay. Папка firmware, файл PCdisplay_v1.6.
     

    Вложения:

    • UYF3ijAnZ74.jpg
      UYF3ijAnZ74.jpg
      Размер файла:
      1,6 МБ
      Просмотров:
      37
  2. BAR__MEN

    BAR__MEN Розбійник Администратор

    Скорее всего, дисплей не исправный попался...

    А с вопросами по коду - на форум автора проекта
     
  3. Ramterdam

    Ramterdam Нерд

    А Вы можете опустить ваши 3 и 4 строки немного пониже?)
     
  4. Airbus

    Airbus Радиохулиган Модератор

    Запустите какой нить тестовый скетч коих много в сети-там посмотрите.
    Например этот
    Код (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()
    { }
     
    Последнее редактирование: 12 окт 2019
  5. dz03330

    dz03330 Нерд

    Дисплей с браком - это точно, нужно программным способом опустить (перерисовать) третью строку или уменьшить весь шрифт в принципе (или еще какой-то вариант) . В коде разбираюсь плохо, на форуме автора не подсказали, пришел за помощь к Вам.
     
  6. ZAZ-965

    ZAZ-965 Гуру

    @dz03330, попробуйте снять металлическую рамку экрана, аккуратно разобрать на основную плату и ЖК экран, протереть контакты на основной плате под токопроводящей резинкой и также аккуратно собрать назад.
     
    Andrey12 нравится это.
  7. dz03330

    dz03330 Нерд

    Достать дисплей не сломав всей конструкции я уже не смогу. Пробовал перерисовать символы, но в такое ощущение что в памяти дисплея может только 8 самописных символов храниться. И если это так - явно не подходит, тут только кейс для "уменьшенных" цифр будет 9 знаков содержать. Обратил внимание, что при стандартном выводе нижний ряд пиксей пропускается. Есть идее как сместить? (то есть пропустить не нижний ряд, а верхний). Или кто-то знает как подсунуть свои шрифты в библиотеку?
     
  8. DetSimen

    DetSimen Спамовредитель Модератор

    Шрифты не подсунешь, смирись.
     
  9. issaom

    issaom Гик

    В документации на дисплей говорится тоже самое - только 8 пользовательских символов. ;-). Библиотеки-русификаторы обычно прямо на ходу подсовывают пользовательские символы на экран поэтому если вы их выведете не 8 а 9 то один из символов задвоится.
     
  10. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Именно поэтому придерживаюсь правила - всё многоногое - на панельках.
    Можно (плюс к предыдущему) немного сплющить резинку по толщине, слегка зажав между двумя пластинами. Она по высоте чуть раздастся и прилегать будет лучше. Но аккуратно - резинки довольно дефицитны.
     
    Последнее редактирование: 13 окт 2019
  11. dz03330

    dz03330 Нерд

    Спасибо! с контактами разобрался. Дисплей показывает. Сможет по коду подсказать? Есть надпись "нет сигнала" и ее съедает 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();
    }}
    }
     
  12. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Отремонтировали ? Как ?
     
  13. dz03330

    dz03330 Нерд

    купил новый. Но старый оживили, зажал с правого угла (чтобы все загорелось), зафиксировал струбциной и залил поксиполом, но получилось страшненько и в мою коробочку уже не влезал.
     
    arkadyf нравится это.
  14. dz03330

    dz03330 Нерд

    По поводу цикла тоже отбой, все сделал)
     
  15. dz03330

    dz03330 Нерд

    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(" ");}

    }}
    }