Can't get 20x4 I2C LCD working

I have the standard 20x4 LCD with I2C backpack.

It looks like the one here: I2C LCD Module

I have connected it to my Arduino Uno as I'm supposed to:

SCL > A5
CDA > A4
VCC > 5V
GND > GND

I have installed the LiquidCrystal_V1.2.1 library and am using the following sample sketch from the above website:

/*-----( Import needed libraries )-----*/
#include <Wire.h>  // Comes with Arduino IDE
// Get the LCD I2C Library here: 
// www.4tronix.co.uk/arduino/sketches/LiquidCrystal_V1.2.1.zip
// Move any other LCD libraries to another folder or delete them
// See Library "Docs" folder for possible commands etc.
#include <LiquidCrystal_I2C.h>

/*-----( Declare Constants )-----*/
/*-----( Declare objects )-----*/
// set the LCD address to 0x27 for a 20 chars 4 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

/*-----( Declare Variables )-----*/
//NONE

void setup()   /*----( SETUP: RUNS ONCE )----*/
{
  Serial.begin(9600);  // Used to type in characters

  lcd.begin(20,4);   // initialize the lcd for 20 chars 4 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("4tronix I2C LCD"); // Print text on 2nd Line
  delay(1000);
  lcd.setCursor(0,2);
  lcd.print("0123456789ABCDEFGHIJ"); //Print 20 characters on 3rd line
  delay(1000);
  lcd.setCursor(0,3);
  lcd.print("4th Line of Text");
  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 )-- */


/* ( THE END ) */

The code compiles and downloads with no errors. However, there is no text on the display.

The display backlight is on and if I change the contrast I just see boxes on the 1st and 3rd rows.

I have a 16x2 I2C LCD. With the above code, it runs fine on the smaller display

Does anyone know what's going wrong?

Thanks

Easy fix, in case it helps someone else

I ran this Arduino Playground - I2cScanner

and changed the address accordingly

Your 'easy fix' does not match how I interpret your sequence of events.

You imply that you were using a specific I2C adapter with your 16x2 and it was working ok, but after you changed to using the adapter with a 20x4 it didn't work until you changed the I2C address.

Most likely you are actually using your two displays with different I2C adapters that appear to be identical. If that is the case you will find that either the IC chips are different (PCF8574T vs PCF8574AT, or they have a different jumper configuration (A0, A1, A2).

Don

Each display has an I2C backpack fixed to the rear so yes, you are correct.

I hope you realize that having different addresses is an advantage.

This means you can connect them simultaneously to the same Arduino pins and access each one with a different 'instance' of your library.

ie:

LiquidCrystal_I2C lcd1(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

LiquidCrystal_I2C lcd2(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

You may have to remove one set of pull-up resistors, but try it first and see.

Don