"A human being should be able to change a diaper, plan an invasion, butcher a hog, conn a ship, design a building, write a sonnet, balance accounts, build a wall, set a bone, comfort the dying, take orders, give orders, cooperate, act alone, solve equations, analyze a new problem, pitch manure, program a computer, cook a tasty meal, fight efficiently, die gallantly. Specialization is for insects." (Robert A. Heinlein)

Tuesday, 14 August 2012

Arduino: playing with LCD displays


My experimenting with the Arduino board is continuing even if I'm not gone so far from trying provided example sketches. That's why I'm writing so little about it. I recently got a couple of LCD display modules based on the Hitachi HD44780 chip, that is the most widely used character LCD standard.

Setting up the circuit

Connection the Arduino to a LCD display module is quite easy, four wires carry the data while two more (Enable and R/S) handle the control signals. Of course you can use the Arduino digital pins you prefer to carry the task but using pins 5,4,3 and 2 for data signals and pins 12 and 11 fro R/S and Enable pin respectively will let you test the provided examples without modification. Apart from connecting wires the only extra components needed are a couple of trimmers (small variable resistors) for LCD contrast and back-light intensity adjustment. Here how the whole circuit looks like (not different from what you can find on Arduino site examples.)



Hello-worlding” ... and a little more

A good Arduino motto could be “There is a library for it”, among the many libraries provided with Arduino could not miss, of course, one for devices as widely used as LCD displays. Once the library is initialized, with the pins used in the circuit, writing on the display is just matter of simply calling “write()” commands. A hello-world example sketch is already provided with Arduino software showing the basics of LCD display writing.
I tried to go a little further by playing with the HD44780 ability to define a handful of custom character in order to play a little Pacman-like animation on the display. Custom character are supported by Arduino's LCD library and can be defined by a eight-by-five bit matrix:


I then defined a “fill” function to put the display in its initial status (filled with “pills”)


and an “anim()” function to do all the animation, and previous position clearing, work:


The sketch's “setup()” method so just initialize the custom characters and the display and calls the fill function while the main “loop()” method calls the animation function and update the Pacman position. Here is the full sketch code:


Here is, at last the whole thing running: as usual the real circuit is a lot messy than what I draw on a computer …
It looks a lot like the games I used to write with my first computer when I was a teenager … may be this is why I love Arduino.