NAME
Device::Arduino::LCD - Perl Interface to the PerLCD Arduino Sketch.
SYNOPSIS
use strict;
use Device::Arduino::LCD;
my $lcd = Device::Arduino::LCD->new;
$lcd->clear;
$lcd->first_line("Hello World");
See examples/demo.pl for a more comprehensive example.
DESCRIPTION
The Arduino is an open-source physical computing platform. Among the many things one might want to do with such a device is connect an LCD to it and print stuff (at least that's what I wanted to do with it).
There are a couple of excellent low-level libraries that can be linked into an Arduino sketch to provide this functionality. I've chosen the LCD4Bit library to link against. The PerLCD sketch provides a few higher level functions as well as a serial listener.
This Perl library provides a very high level interface for formatting and sending messages to the sketch's listener. Once the device is wired up to an LCD (a fairly trivial task), the USB serial drivers installed, and the sketch compiled and uploaded, getting text on the screen should be no more difficult than the example above: Zero knowledge of LCDs required.
The sketch provided can obviously be used with a client library written in any language, the choice of Perl was (almost) arbitrary.
VARIABLES
Package variables representing (supposedly) sensible default. May be changed as necessary before new() is called.
$Device::Arduino::LCD::Device -- default serial device to connect with. (/dev/tty.usbserial)
$Device::Arduino::LCD::Baud -- default baud rate (9600). Changing this requires recompiling and reloading the perlcd.cc code.
$Device::Arduino::LCD::READ_TIMEOUT -- default time in seconds for receive() to wait when called (10).
METHODS
new(class, [device, [baud]])
Returns a Device::Arduino::LCD object or dies if unable to open the serial device.
first_line(Device::Arduino::LCD, text)
Print text on the first line of the LCD. Characters exceeding the length of the display are truncated.
second_line(Device::Arduino::LCD, text)
As above, on the second line.
clear(Device::Arduino::LCD, [pre-delay, [post-delay]])
Clears the LCD. Waits pre-delay seconds before sending the command and post-delay seconds before returning.
scroll_left(Device::Arduino::LCD, [delay])
Scrolls both lines of the LCD to the left, at a rate of delay ms.
scroll_up(Device::Arduino::LCD, text, [pre-delay, [internal-delay, [post_delay]]]);
Scrolls the text up (i.e., line 2 becomes line 1; line 2 contains text). Waits pre-delay before sending the command; scrolls at a rate of internal-delay seconds; waits post_delay seconds before returning. Text is an array ref.
place_string(Device::Arduino::LCD, text, row, column)
Places character one of text at the row and column specified. Rows (on a two line display) range from 1 to 2; columns, however, are zero indexed. (Sorry about that.)
gauge_pct(Device::Arduino::LCD, gauge-number, x%)
Sends x% of 5V to the port specified by gauge-number. Gauges are numbered 1, 2, and 3 corresponding to PWM pins 3, 5, and 6 on the arduino. This has bugger all to do with LCDs, but since the pins are available it seems to make sense to provide a way of addressing them.
command(Device::Arduino::LCD, LCD-command)
Send (numeric) LCD-command directly to the LCD. Useful for sending the sorts of commands listed here: http://tinyurl.com/234d8z
print_char(Device::Arduino::LCD, character)
Send the character directly to the LCD. The method will handle converting the character to an integer. With command(0 and print_char() one can achieve pretty much anything but initialization of the display.
make_char(Device::Arduino::LCD, ascii-num, data)
Installs data (an eight element array or array ref) as ascii character ascii-num.
usr_1(), usr_2(), ..., usr_8()
Returns the ascii character 0 .. 7
PREREQUISITES
Device::SerialPort from CPAN (http://tinyurl.com/2tee6b)
GNU avr-gcc, uisp, and avrdude. Note: it's probably possible to use the Arduino development environment instead. I much prefer typing "make" and "make upload" (and editing in emacs).
An Arduino NG board and an LCD. In the US www.sparkfun.com distributes the board at a reasonable price. I also bought an LCD from them (the Xiamen GDM1602K).
Appropriate USB serial drivers. For OS X these are included with the Arduino development environment package.
The Arduino PerLCD sketch compiled and loaded onto the board. Edit arduino/Makefile (there are instructions at the top) and then run 'make'. If that goes well, frob the arduino reset switch and immediately execute 'make upload'.
SEE ALSO
The Arduino homepage: http://www.arduion.cc, particularly Heather Dewey-Hagborg's LCD tutorial (http://www.arduino.cc/en/Tutorial/LCDLibrary) and neillzero's LCD4BitLibrary page (http://www.arduino.cc/playground/Code/LCD4BitLibrary).
The Hitachi HD44780 Datasheet: http://www.electronic-engineering.ch/microchip/datasheets/lcd/hd44780.pdf
Dincer Aydin's LCD page on geocities was also a good resource, particularly the Custom-Character Calculator. http://www.geocities.com/dinceraydin/lcd/intro.htm
Erik Nordin's HD44780-Based LCD FAQ: http://www.repairfaq.org/filipg/LINK/F_LCD_HD44780.html
AUTHOR
Kevin Montuori, <montuori@gmail.com>
COPYRIGHT AN DLICENSE
Copyright (C) 2007 by Kevin Montuori & mconsultancy
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.1 or, at your option, any later version of Perl 5 you may have available.
1 POD Error
The following errors were encountered while parsing the POD:
- Around line 241:
You forgot a '=back' before '=head1'