"hello world" lcd display

having trouble getting the simple liquid crystal display “hello world” to work. IDE 1.7.11. Sketch from File>Examples>LiquidCrystal…file shown below. Photo of my setup attached. After successful compiling and uploading all I see is about 3-4 random characters. So, after deleting the lcd.begin and lcd.print statements from void setup(), milliseconds/1000 is displayed (upper row, left) and counting upwards. So, the display appears to be functioning. I switched to a different lcd with the same result. I am seeing similar results from the other basic lcd sketches in that library. Suggestions welcome.

LiquidCrystal Library - Hello World

Demonstrates the use a 16x2 LCD display. The LiquidCrystal
library works with all LCD displays that are compatible with the
Hitachi HD44780 driver. There are many of them out there, and you
can usually tell them by the 16-pin interface.

This sketch prints “Hello World!” to the LCD
and shows the time.

The circuit:

  • LCD RS pin to digital pin 12
  • LCD Enable pin to digital pin 11
  • LCD D4 pin to digital pin 5
  • LCD D5 pin to digital pin 4
  • LCD D6 pin to digital pin 3
  • LCD D7 pin to digital pin 2
  • LCD R/W pin to ground
  • LCD VSS pin to ground
  • LCD VCC pin to 5V
  • 10K resistor:
  • ends to +5V and ground
  • wiper to LCD VO pin (pin 3)

Library originally added 18 Apr 2008
by David A. Mellis
library modified 5 Jul 2009
by Limor Fried (http://www.ladyada.net)
example added 9 Jul 2009
by Tom Igoe
modified 22 Nov 2010
by Tom Igoe

This example code is in the public domain.


// include the library code:
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
// set up the LCD’s number of columns and rows:
lcd.begin(16, 2);
// Print a message to the LCD.
lcd.print(“hello, world!”);

void loop() {
// set the cursor to column 0, line 1
// (note: line 1 is the second row, since counting begins with 0):
lcd.setCursor(0, 1);
// print the number of seconds since reset:
lcd.print(millis() / 1000);

I don’t see a GND connection between the breadboard and the Arduino.

Have you wondered why your backlight doesn’t work? Hint: Have you noticed that the horizontal red and blue lines on your breadboard aren’t continuous?

If it still doesn’t work —

Don’t delete lcd.begin() since without that your display will be initialized improperly.

Are the ‘random’ characters always the same and are they always in the same locations?

Try this sketch and see what happens. Make sure you let it run for a while.

#include <LiquidCrystal.h>

//LiquidCrystal lcd(rs,en,d4,d5,d6,d7);
  LiquidCrystal lcd(12, 11, 5, 4, 3, 2);       // put your pin numbers here

void setup()
    lcd.begin(20, 4);                          // put your LCD parameters here
    for (char i=47; i<127; i++)                // send 80 consecutive displayable characters to the LCD
        delay(100);                            // this delay allows you to observe the addressing sequence

void loop()


Don, Of course...the ground wire. Thank you, thank you! Now it works as it should. And while I've jumpered across the busses on my other breadboards, I got so involved into all the wires for this one I completely forgot. And while the cursor displayed, I was less concerned about the backlight than the fact I wasn't seeing the message. It just takes another set of eyes and back to basics! John

It just takes another set of eyes …

A good photograph and a clean layout always helps. Have fun.


Please note that the 1.7.11 IDE is the IDE from Arduino.org and not from Arduino.cc (where you posted this).

Although the two are friends again, the IDEs are different and for certain problems you might be better of asking the question at the arduino.org forum.

Or perhaps use the arduino.cc 1.8.0 IDE which seems to have brought all the board types together.

Release notes:

ARDUINO 1.8.0 - 2016.12.20

* Linux: running in command line mode doesn't require an X11 display anymore
* "Save as" now clears the "modified" status
* builder: Paths with strange UTF8 chars are now correctly handled
* builder: .hpp and .hh file extensions are now considered valid sketch extension
* builder: core.a is not rebuild if not needed (improve build time in particular for big projects)
* Fixed swapped actions "Copy for Forum" and "Copy as HTML"
* Linux/osx: If an editor tab is a symbolic link it is no more replaced with a real file when saving (see #5478)
* Increased the upload timeout to 5 minutes (it was 2 min, but it may be not sufficient when uploading via UART a big sketch)

* Added Arduino.org boards
* Added Adafruit Circuit Playground board
* Added "-g" option to linker to keep debug information in the .elf file (see #5539)
* avrdude: Added fake configuration for EFUSE on atmega8 part. This solves a long standing issue with "Burn bootloader".
  Thanks @rigelinorion, @awatterott

Thanks for the information...the two sites look very similar...not at all sure how I ended up downloading the arduino.org software, yet ended up on the arduino.cc site that I have been using for add'l reference and tutorials. unless it was an oversight in a google search. interesting that arduino.org just upgraded to 1.8.0 in the last several days.

As we’re friends again, I suspect it to be the same under the hood; look-and-feel might differ slightly, no idea.

When you buy a product from .org, they give you a link from where to download their IDE; so maybe you bought a starter-kit and that way you ended op on the .org site.

I suspect that, because the .cc site is older and hence far more visited via google, google gives that preference in the listings.