[РЕШЕНО] LCD + i2c странная проблема вывода

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем GrizliK91, 26 окт 2014.

  1. GrizliK91

    GrizliK91 Нерд

    День добрый.

    Появилась небольшая проблема. Подключил дисплей к конвертеру i2c и пытаюсь вывести элементарный текст из примера. Но он не выводится.
    Код (Text):
    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>

    LiquidCrystal_I2C lcd(0x27,16,2);  

    void setup()
    {
      lcd.init();                      // Инициализация lcd          
      lcd.backlight();                  // Включаем подсветку
      // Курсор находится в начале 1 строки
      lcd.print("Hello world1");      // Выводим текст
      lcd.setCursor(0, 1);              // Устанавливаем курсор в начало 2 строки
      lcd.print("Hello world2");    // Выводим текст
    }
    int i;
    void loop()
    {
    }
    Методом научного тыка понял как вывести его, а именно добавить в loop повтор вывода.
    Код (Text):
    void loop()
    {
      lcd.setCursor(0, 0);
      lcd.print("TExt1");      // Выводим текст
      lcd.setCursor(0, 1);              // Устанавливаем курсор в начало 2 строки
      lcd.print("TExt2");    // Выводим текст
    }
    Но как я понял, ардуино постоянно перезаписывает текст на экран, а это не то что нужно. Плюс если вставить delay, то ничего не выводится.

    Подскажите пожалуйста, в какую сторону копать?
    Необходимо получить вывод статического текста(1 раз передали на экран, и только в случае чего, перезаписываем).
     
  2. Tomasina

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

    попробуй после lcd.init(); сделать небольшую паузу.
     
  3. vvr

    vvr Инженерище

    А разве в библиотеке нет примеров?
     
  4. GrizliK91

    GrizliK91 Нерд

    Не помогает(

    Есть, смысл в них тот же.
    Код (Text):
    //DFRobot.com
    //Compatible with the Arduino IDE 1.0
    //Library version:1.1
    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>

    LiquidCrystal_I2C lcd(0x27,16,2);  // set the LCD address to 0x27 for a 16 chars and 2 line display

    void setup()
    {
      lcd.init();                      // initialize the lcd

      // Print a message to the LCD.
      lcd.backlight();
      lcd.print("Hello, world!");
    }

    void loop()
    {
    }
     
  5. GrizliK91

    GrizliK91 Нерд

    В дополнение, возился с ним 2 часа. И если я подключаю напрямую проводами (без конвертера i2c), то вот этот код выводит на экран.
    Код (Text):
    #include <LiquidCrystal.h>

    LiquidCrystal lcd(7, 8, 9, 10, 11 , 12);

    void setup() {
      lcd.begin(16, 2);
      lcd.print("Hello world1");      // Выводим текст
      lcd.setCursor(0, 1);              // Устанавливаем курсор в начало 2 строки
      lcd.print("Hello world2");    // Выводим текст
    }

    void loop() { }
    Получается у меня косяк либо в конвертере, либо в библиотеке?

    UPD:
    Сам конвертер выглядит вот так.
    [​IMG]
    Я так понимаю что косяк скорее всего в экране, а именно в задействованных пинах. Они вроде у разных экранов по разному используются. Тогда возникает вопрос, где бы мне их поправить?
     
    Последнее редактирование: 27 окт 2014
  6. 9xA59kK

    9xA59kK Гик

    /DFRobot.com
    //Compatible with the Arduino IDE 1.0
    //Library version:1.1
    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>

    LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display

    void setup()
    {
    lcd.init(); // initialize the lcd

    // Print a message to the LCD.
    lcd.backlight();
    lcd.print("Hello, world!");
    }

    void loop()
    {
    }

    у меня эта же библиотека ,работает нормально
     
    Последнее редактирование: 27 окт 2014
    GrizliK91 нравится это.
  7. 9xA59kK

    9xA59kK Гик

    Случаем никаких ошибок не выдает при компиляции. Может другую библиотеку использовать. При включении дисплей загорается с использованием I2C конвертера. Что отображается?
     
  8. GrizliK91

    GrizliK91 Нерд

    Этот код будет выполняться, так как экранчик будет постоянно перезаписываться (от этого он довольно тусклый).

    Ошибок не вылезает. Библиотек такое множество, что я начал в них путаться. А на самом модуле не написано производителя, вот пытаюсь выбить у продавца информацию о библиотеках.

    Вечером буду дальше ковырять.
     
  9. 9xA59kK

    9xA59kK Гик

    Я вставлял delay(1000) для того чтобы он не очень быстро перезаписывался . Убрать delay() тогда будет тускло светиться,Будет оч быстро пытаться обновляться - п даташиту надо задержку для обновления экрана
     
  10. GrizliK91

    GrizliK91 Нерд

    Да, мне по сути и перезапись постоянная не нужна. Экранчик используется для выбора меню. А если поставить задержку, то ничего выводиться не будет.
     
  11. 9xA59kK

    9xA59kK Гик

    Почему не будет. Напиши пример вывода меню. Я пробовал выводить три меню циклически от одной кнопки, нормально работает. Использовал swith() ...case
     
    GrizliK91 нравится это.
  12. GrizliK91

    GrizliK91 Нерд

    Дело не в меню.

    Вот этот код будет выводить на экран текст.
    Код (Text):
    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>

    LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display

    void setup()
    {
    lcd.init(); // initialize the lcd

    // Print a message to the LCD.
    lcd.backlight();
    }

    void loop()
    {
    lcd.print("Hello, world!");
    }
    А вот этот не будет показывать на экране ничего. (по факту должен моргать словом)
    Код (Text):
    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>

    LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display

    void setup()
    {
    lcd.init(); // initialize the lcd

    // Print a message to the LCD.
    lcd.backlight();
    }

    void loop()
    {
    lcd.clear();
    delay(3000);
    lcd.print("Hello, world!");
    delay(3000);
    }
    Вечером могу видео залить
     
  13. GrizliK91

    GrizliK91 Нерд

    Так, экран заработал.

    Подключил вторую плату i2c и попробовал с ней. Она работает с любой библиотекой.
    Тут выходит 2 варианта. Либо 1 плата кривая, либо у меня руки кривые и когда я паял, что то закосячил.
    Всем спасибо за попытки помочь!