Библиотека для LCD1604 I2C

Тема в разделе "Arduino & Shields", создана пользователем Gioco, 5 апр 2016.

  1. Gioco

    Gioco Нуб

    Всем привет! не могу найти рабочую библиотеку для LCD.
    проблема следующая если использовать библиотеку для 1602 или 2004 происходит сдвиг в третьей и четвертой строчке на 4 символа.
    к примеру
    lcd.setCursor (0, 3);
    lcd.print (tmax);
    то он выведет переменную на экране в четвертой строке с пятого символа
    а если написать так
    lcd.setCursor (16, 2);
    lcd.print (tmax);
    то вывод будет как и положено в четвертой строке с первого символа!
    как будто он определяет что у меня стоит экран 2004

    если кто встречался с такой проблемой поделитесь ее решением чтобы не было сдвигов! не хотелось бы колхозить в коде!!!
     
  2. Vad33

    Vad33 Капитан-оригинал

    как в анекдоте "если третий муж бьет по морде, значит дело не в муже" :)
    отлаживайте код - в нем проблема
     
  3. Tomasina

    Tomasina Сушитель лампочек Модератор

    поставь IDE не самой последней версии, они не дружат с этой библиотекой.
     
  4. Gioco

    Gioco Нуб

    подскажите пожалуйста какая из версий самая стабильная?
     
  5. Tomasina

    Tomasina Сушитель лампочек Модератор

    нет такого. У каждой свои странности.
     
  6. Gioco

    Gioco Нуб

    ок спасибо!
     
  7. 9xA59kK

    9xA59kK Гик

    ВОзможно у вас проблемы с кодом, которого тут никто не увидел.
    Я пробовал оба дисплея на одной и той же библиотеке и все нормально работает.
     
  8. Gioco

    Gioco Нуб

    )))) самое интересное что эту библиотеку я и ставил!! а еще ради интереса провел сегодня эксперемент утром который показал что дело точно не в коде! если подключить дисплей обычным способом, то есть не по I2C естественно используется другая библиотека то все нормально и корректно работает!!!)))
    код остался тем же изменилась только библиотека и инициализация дисплея.
     
  9. 9xA59kK

    9xA59kK Гик

    Так и не увидел никто не библиотеки,ни схемы подключения, фото, кода. Вообщем вам виднее. А мысли мы читать не умеем.
    ps\ Раз уверен что дело не в LCD, а в драйвере I2C для него , то его и поменяй.
     
  10. Gioco

    Gioco Нуб

    приношу свои извинения !! на днях буду на работе сделаю полное описание и скрины !
     
  11. Gioco

    Gioco Нуб

    добрый день сделал все как и просили!! итак полная информация!
    использую обычный ардуино нано (леонардо), i2c LCD (заказывал в китаии), LCD winstar 1604
    программа Arduino IDE 1.6.5, и библиотека была взята из описания выше, оттуда же я взял кусок кода виде примера.
    1.jpg
    Итак я подключаю библиотеку набираю код и заливаю

    // Arduino IDE 1.6.5
    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>

    LiquidCrystal_I2C lcd(0x3f,16,4);
    /* Задаем адрес и размерность дисплея.
    При использовании LCD I2C модуля с дисплеем 16х4 ничего в коде изменять не требуется, cледует только заменить цифру отвечающую за количество сторок */

    void setup()
    {
    lcd.init(); // Инициализация LCD
    lcd.clear ();
    delay (500);
    lcd.backlight(); // Включаем подсветку
    lcd.setCursor(0, 0); // Устанавливаем курсор в начало 1 строки
    lcd.print("Z-LCD I2C 2004"); // Выводим текст
    lcd.setCursor(0, 1); // Устанавливаем курсор в начало 2 строки
    lcd.print("module"); // Выводим текст
    lcd.setCursor(0, 2); // Устанавливаем курсор в начало 3 строки
    lcd.print("12345678"); // Выводим текст
    lcd.setCursor(0, 3); // Устанавливаем курсор в начало 4 строки
    lcd.print("zelectro.cc"); // Выводим текст
    }

    void loop()
    {
    }
    в результате получаю следующий картинку на экране.
    2.jpg
    затем делаю простое подключение дисплея не через I2C LCD, делаю правки в коде

    // Arduino IDE 1.6.5
    //#include <Wire.h>
    //#include <LiquidCrystal_I2C.h>
    #include <LiquidCrystal.h> // Лобавляем необходимую библиотеку
    LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // (RS, E, DB4, DB5, DB6, DB7)

    //LiquidCrystal_I2C lcd(0x3f,16,4);
    /* Задаем адрес и размерность дисплея.
    При использовании LCD I2C модуля с дисплеем 16х4 ничего в коде изменять не требуется, cледует только заменить цифру отвечающую за количество сторок */

    void setup()
    {
    lcd.begin(16, 4); // Задаем размерность экрана
    //lcd.init(); // Инициализация LCD
    lcd.clear ();
    delay (500);
    //lcd.backlight(); // Включаем подсветку
    lcd.setCursor(0, 0); // Устанавливаем курсор в начало 1 строки
    lcd.print("Z-LCD I2C 2004"); // Выводим текст
    lcd.setCursor(0, 1); // Устанавливаем курсор в начало 2 строки
    lcd.print("module"); // Выводим текст
    lcd.setCursor(0, 2); // Устанавливаем курсор в начало 3 строки
    lcd.print("12345678"); // Выводим текст
    lcd.setCursor(0, 3); // Устанавливаем курсор в начало 4 строки
    lcd.print("zelectro.cc"); // Выводим текст
    }

    void loop()
    {
    }

    и в результате получаю нормальную картинку на LCD
    3.jpg
     
  12. Airbus

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

    Взято как я понял отсюда?Что в первом скетче означает LiquidCrystal_I2C lcd(0x3f,16,4);?Меня интересует именно 0x3f
     
  13. Gioco

    Gioco Нуб

    адрес модуля по шине i2c
     
  14. Airbus

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

    Эт понятно.Куда он у Вас подключается и как Вы этот адрес "вычислили"?Со скетчем вроде всё в порядке жаль нет такого индикатора а то проверил бы.ИМХО с адресом какая то шняга.С адресом "автора" пробовали?
     
  15. Vad33

    Vad33 Капитан-оригинал

    Возможно все дело в вашем "неправильном" дисплее.
    Обычно дисплеи идут 16х2 и 20х4.
    Есть подозрение, что при выводе последних двух строк
    дисплей работает в режиме 20х4
    Поэтому и сдвигает именно на 4 (!) позиции.

    Например у чела такая же проблема:
    http://geekelectronics.org/arduino/podklyuchenie-ekrana-k-arduino.html

    В общем проблема или в библиотеке или в модуле i2c.
    Несовместимые они с 16х4.
     
    Последнее редактирование: 10 апр 2016
  16. Gioco

    Gioco Нуб

    на самом деле после недели экспериментов к такому выводу я и пришел!)))) просто заказал новый дисплей и новый модуль i2c когда придет буду пробовать снова!))))
     
  17. Lexx225

    Lexx225 Нуб

    та же проблема была со сдвигом на 4 символа. заморачиваться не стал, просто для строк 2 и ниже отпозиционировал курсор на -4 позицию. такой вот армейский способ:

    float levelV2 = (25 - levelH2)*0.4;
    lcd.setCursor(-4, 2);
    lcd.print("E2(MCAA) =");
    lcd.print(levelV2);
    lcd.print("L");

    и стало мне хорошо)
     
  18. WERAN

    WERAN Нуб

    Проблема , скорее всего в библиотеке! Метод выше помог! А что делать....!!
     
  19. Verwolf22

    Verwolf22 Нуб

    Всем привет) Возможно не вовремя, но хочу поделится ещё одним решением, если кому-нибудь не хочется заморачиваться с отрицательными числами. Необходимо в файле LiquidCrystal_I2C.cpp в методе send перед строкой uint8_t highnib=value&0xf0; добавить строку if ((value>=0x94) && (value<=0xa3) || (value>=0xd4) && (value<=0xe3)) {value-=0x04;}