Интерфейсная плата I2C с последовательным интерфейсом не отображает текст (неправильные контакты?)

У меня есть ЖК-экран 1602, который отлично работает сам по себе. Однако я хотел освободить несколько контактов, используя контроллер I2C /IIC LCD, который я приобрел отдельно.

Пока контроллер, похоже, общается с моим Arduino UNO по правильному адресу, я не могу получить текст для отображения. По умолчанию (без кода) кажется, что на ЖК-дисплее будет 1 строка из 16 твердых «квадратов». При использовании адреса 27 в моем коде ЖК-дисплей изменится на 2 строки по 16 квадратов (см. Фото ниже). Код также требует, чтобы подсветка мигала 3 раза, что работает. Однако я не могу получить ничего, кроме двух линий квадратов. (Полный код находится в нижней части этого вопроса).

Я использую библиотеку LiquidCrystal_I2C от F Malpartida, которая, кажется, широко используется.
Есть ли лучшая библиотека, которую я должен использовать?

Мне интересно, используются ли в коде неправильные контакты. Все эскизы, которые я вижу в Интернете, используют следующие контакты:

//                    addr,en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
// Set the LCD I2C address

Но все 1602 ЖК-дисплеи, которые я вижу в Интернете, имеют те же контакты, что и у меня, как вы можете видеть на моей фотографии ниже:

ЖК-контроллер I2C

Эти штыри кажутся стандартными:
1602 LCD Pinout

Чтобы еще больше запутать меня, штырьки на ЖК-панели начинаются с 1 слева, но выходы кода по умолчанию, похоже, начинаются с 0! Поэтому я попытался изменить контакты кода на номера на ЖК-панели. ЖК-дисплей больше не изменяется на 2 строки квадратов и больше не мигает подсветкой. Затем я попытался вычесть 1 из каждого булавки (чтобы начать с 0), тот же результат. Затем я попытался использовать значки по умолчанию минус 1, тот же результат. Таким образом, кнопки по умолчанию как-то более правильны ?! Что я делаю неправильно?

Кто-нибудь еще получил один из этих контроллеров I2C для их работы, и если да, то как?

Полный код:

/* YourDuino.com Example Software Sketch
 16 character 2 line I2C Display
 Backpack Interface labelled "YwRobot Arduino LCM1602 IIC V1"
 [email protected] */

/*-----( Import needed libraries )-----*/
#include <Wire.h>  // Comes with Arduino IDE
// Get the LCD I2C Library here: 
// https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads
#include <LiquidCrystal_I2C.h>

/*-----( Declare objects )-----*/
// set the LCD address to 0x27 for a 20 chars 2 line display
// Set the pins on the I2C chip used for LCD connections:
//                    addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Set the LCD I2C address

void setup()   /*----( SETUP: RUNS ONCE )----*/
{
  Serial.begin(9600);  // Used to type in characters
  lcd.begin(16,2);   // initialize the lcd for 16 chars 2 lines, turn on backlight

// ------- Quick 3 blinks of backlight  -------------
  for(int i = 0; i< 3; i++) {
    lcd.backlight();
    delay(250);
    lcd.noBacklight();
    delay(250);
  }
  lcd.backlight(); // finish with backlight on  

//-------- Write characters on the display ------------------
// NOTE: Cursor Position: (CHAR, LINE) start at 0  
  lcd.setCursor(0,0); //Start at character 4 on line 0
  lcd.print("Hello, world!");
  delay(1000);
  lcd.setCursor(0,1);
  lcd.print("HI!YourDuino.com");
  delay(8000);  

// Wait and then tell user they can start the Serial Monitor and type in characters to
// Display. (Set Serial Monitor option to "No Line Ending")
  lcd.clear();
  lcd.setCursor(0,0); //Start at character 0 on line 0
  lcd.print("Use Serial Mon");
  lcd.setCursor(0,1);
  lcd.print("Type to display");  

}/*--(end setup )---*/

void loop()   /*----( LOOP: RUNS CONSTANTLY )----*/
{
  {
    // when characters arrive over the serial port...
    if (Serial.available()) {
      // wait a bit for the entire message to arrive
      delay(100);
      // clear the screen
      lcd.clear();
      // read all the available characters
      while (Serial.available() > 0) {
        // display each character to the LCD
        lcd.write(Serial.read());
      }
    }
  }

}/* --(end main loop )-- */
8 голосов | спросил Bort 31 WedEurope/Moscow2014-12-31T22:05:30+03:00Europe/Moscow12bEurope/MoscowWed, 31 Dec 2014 22:05:30 +0300 2014, 22:05:30

7 ответов


3

Прежде всего, похоже, что эти провода неправильно подключены:

  

введите описание изображения здесь

Я раньше не разбирал женскую перемычку, так что это может и не быть проблемой. Однако представляется вероятным, что это может быть причиной.

Кроме того, вам нужно , чтобы настроить контраст, повернув этот триммер (синяя вещь, которая выглядит такой, как будто она имеет винт). ЖК-дисплеи либо ничего не отображают, ни размытая версия текста, ни синие поля, если контраст не установлен правильно. Вероятно, это причина.

ответил Anonymous Penguin 1 Jam1000000amThu, 01 Jan 2015 00:50:47 +030015 2015, 00:50:47
3

Я купил SainSmart 20x04, и мне также пришлось изменить адрес на 0x3F. Моя перемычка подсветки отсутствовала, этот маленький заголовок справа от платы I2C обеспечивает мощность подсветки. Некоторый код, который я нашел, включал это:

lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
ответил Ed Kimble 10 Jam1000000amSat, 10 Jan 2015 10:14:05 +030015 2015, 10:14:05
0

Насколько я знаю, подтягивающие резисторы должны быть интегрированы с дисплеем.

Вы пробовали разные адреса? У меня есть аналогичный, который работает по адресу 0x3F. Возможно, это помогает.

ответил engineer 31 WedEurope/Moscow2014-12-31T23:09:59+03:00Europe/Moscow12bEurope/MoscowWed, 31 Dec 2014 23:09:59 +0300 2014, 23:09:59
0

Измените этот код:

LiquidCrystal_I2C lcd(0x26, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

Для этого:

LiquidCrystal_I2C lcd(0x26, 2, 1, 0, 4, 5, 6, 7, 8, POSITIVE);

(Аргумент перед «ПОЗИТИВНЫМ» изменяется от 3 до 8)

ответил oz1ayw 4 FebruaryEurope/MoscowbWed, 04 Feb 2015 00:55:21 +0300000000amWed, 04 Feb 2015 00:55:21 +030015 2015, 00:55:21
0

У меня такая же проблема, и я исправлю это, просто изменив адрес для LCD 1602A, который находится в учебниках 0x27, но в моем устройстве 0x3F.

Удачи!

ответил Ricardo Herrero 19 PM00000020000005931 2016, 14:43:59
-1

Я уверен, что эта ссылка будет полезна для вас, у меня такой же lcd, и я получил ее с I2C, следуя шагам в этой ссылке http://forum.arduino.cc/index.php?topic=128635.0

ответил omaima 23 PMpThu, 23 Apr 2015 17:00:46 +030000Thursday 2015, 17:00:46
-2
LiquidCrystal_I2C lcd(0x3f, 2, 1, 0, 4, 6, 5, 7, 3, POSITIVE);  // Set the LCD

Модуль I2C D6-> P5 представляет собой D5-> P6 (инвертированный).

ответил Vlecsi 2 MaramWed, 02 Mar 2016 03:20:30 +03002016-03-02T03:20:30+03:0003 2016, 03:20:30

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132