BLOG > Tutorial 13 for Arduino: Liquid Crystal Displays

I had initially planned to do an LCD tutorial a little further down the line, but there was very high demand for it, and I already had a circuit assembled for testing the new LCD that element14 sent me to evaluate. So, this seemed like an appropriate time to roll it out!

In this episode, I explain how communication works with most modern LCD character displays, I show the schematics and circuit required to talk to an LCD, and then I demonstrate it working using two demo programs.  The first program will create an animated progress bar using custom characters, and the second will leverage I2C and button debouncing knowledge from tutorial 7 and tutorial 2 respectively to create a real time temperature readout in both Celsius and Fahrenheit.  Download the source code, schematics, datasheets, and parts list below!


You can download the files associated with this episode here:

GNU GPL License Distributed under the GNU General Public (Open-Source) License.
Please Attribute and Share-Alike.

Dave Morgan has created a modified version of this code that works with the TMP36 sensor found in the Sparkfun Inventors Kit.  Download it here: MyRoomTempLCD.


  1. Hi Jeremy,
    I’m planning to do Arduino Uno based water level indicator with LCD (16×2) display project.
    Could you pls advice me on the circuit diagram, components required and also the Arduino source code for this project. I would appreciate if you answer this in detail. Looking forward for your reply…


  2. Respected sir,
    Actully my final year project is based on the arduino.Basic idea is that I want wireless data transfer between pendrives with help of arduino bluetooth module.There are many kinds of hardware we require to complete the display screen,bluetooth module,pendrives or external memory.
    So plz advice me on how to interface or handle this device with arduino.

    Thanks in advance.

  3. Hiii Jeremy,

    I am final year student, i want to interface Graphical LCD with arduino MEGA. I don’t have an any idea about it. I need your help in interfacing GLCD with arduino. if you have any circuit diagram with the programming then please mail me at [email protected]

    Please reply

  4. Hello Jeremy,

    I have watched all of your tutorials and they are great. The lcd tutorial was very helpful, but I was wondering if you could help me a bit more. I have trying to use one of adafruit tft lcd screen to display menu options. How do I properly code the arduino uno to read menus and submenus from an encoder’s selection, and display it to the screen? If there is any help you can give me, I would appreciate it.

  5. Hello Jeremy :
    I would like to say thanks for your nice job. I have a graduate project , I need your help please.
    I have source of pulses the pulses received each one second I receive (0 – 4 ) pulses and depend on this number , I will decide some function , The problem is ,I used attachinterrupt function , detect the HIGH or RISING edge , it is work , but my counter continuous increasing because it does not reset after each second
    it still increment . I need just reset this counter after certain time to recount the other pulses from starting from 0 .

  6. How do you save your project to pcb? Do i need to remove the ic chip and install it on the pcb without arduino?! I have no idea, please someone reply! Thanks!

  7. Got your book Jeremy. Tried TC74 sketch, could only get it to work by replacing int temp_address = 72 to
    const int temp_address = 72
    My guess is you know this already, just checking.

  8. Awesome tutorial. I was looking to build in a menu similar as in this video (arduino lcd tutorial) on top of what you have with the sensors. It would control some of the setpoints for the thermostat.

  9. Thanks for a marvelous posting! I definitely enjoyed reading it, you may
    be a great author. I will remember to bookmark your blog and will come back down the road.
    I want to encourage one to continue your great posts,
    have a nice evening!

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.