Problem with an I2C LCD

I have an I2C LCD connected to an Arduino Uno. I have downloaded and use a library which also had a example code.
The first problem is that although the LCD displays the text it is dark. I need to illuminate the LCD with a bright light source in order to see the text. In all other vLCD I have used this was not a problem. Seem to be issue with backlight. The code controlling backlight has no effect on the display
Second problem. There are never any serial available in the loop

/* YourDuino.com Example Software Sketch
20 character 4 line I2C Display
Backpack Interface labelled "YwRobot Arduino LCM1602 IIC V1"
Connect Vcc and Ground, SDA to A4, SCL to A5 on Arduino
terry@yourduino.com */

/*-----( Import needed libraries )-----*/


#include <LiquidCrystal_SR3W.h>
#include <LiquidCrystal_SR2W.h>
#include <LiquidCrystal_SR.h>
#include <LiquidCrystal_I2C.h>
#include <LiquidCrystal.h>
#include <LCD.h>
#include <I2CIO.h>
#include <FastIO.h>
#include <Wire.h>  // Comes with Arduino IDE

// Get the LCD I2C Library here: 
// https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads
// Move any other LCD libraries to another folder or delete them
// See Library "Docs" folder for possible commands etc.



/*-----( 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 )-----*/


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: Lines and Characters start at 0  
	lcd.setCursor(3, 0); //Start at character 4 on line 0
	lcd.print("Hello, world!");
	delay(1000);
	lcd.setCursor(2, 1);
	lcd.print("From YourDuino");
	delay(1000);
	lcd.setCursor(0, 2);
	lcd.print("20 by 4 Line Display");
	lcd.setCursor(0, 3);
	delay(2000);
	lcd.print("http://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.setCursor(0, 0); //Start at character 0 on line 0
	lcd.print("Start Serial Monitor");
	lcd.setCursor(0, 1);
	lcd.print("Type chars 2 display");
	Serial.println("LOOP");

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


void loop()   /*----( LOOP: RUNS CONSTANTLY )----*/
{
		// when characters arrive over the serial port...
		lcd.backlight();
		
		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 ) */

Is the backlight jumper installed on your I2C backpack?

1 Like

Is there a jumper connecting the 2 pins on the i2c backpack?

1 Like

You've told the LCD library to use pins 0 & 1 which are needed for serial Comms to work correctly. You need to choose different pins.

1 Like

The numbers between the I2C address and "POSITIVE" are the pin mapping of the I2C expander chip, not the pin numbers of the Arduino itself.

1 Like

I'll get my coat ...... :brain::boom:

2 Likes

You're not alone; I thought the same thing at first glance but remembered the I2C bit before I put my foot in it. :slight_smile:

2 Likes

It may be necessary to adjust the contrast control on the I2C board.

My personal preference is to install the hd44780 library by Bill Perry using the IDE's library manager, then run the example sketch File > Examples > hd44780 > ioClass > hd44780_I2Cexp > I2CexpDiag, that will display lots of information in the serial monitor about the I2C address, expander chip to LCD pin mapping, polarity of the backlight pin, etc.

On the backpack I only see two pins labeled LED and nothing connected there.

That lcd init line is from the sample code for the library which I would expect to work. And as far as actually writing characters on the lcd it does work

That explains why it's dark then. You need a shunt jumper to complete the circuit. One of these bits:

1 Like

You was right here. Now only the issue with serial communication remains

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.