=head1 NAME PINE64::MAX7219 driver for 8-digit 7-seg MAX7219 displays =head1 SYNOPSIS use PINE64::MAX7219; my $max = PINE64::MAX7219->new(0,1,2); $max->turn_on(1); $max->set_scanlimit(1); $max->set_intensity('max'); #display test (all on / all off)) $max->disp_teston(); sleep(2); $max->disp_testoff(); #clockwise circles $max->clockwise_circles(10); #counter clockwise circles $max->countercw_circles(10); #print a sentence, 0.5sec / word $max->print_sentence("perl rules on pine64", 500000); #endless KnightRider effect! for(;;){ $max->bullets_lrmid(1); $max->bullets_rlmid(1); }#end for =head1 DESCRIPTION This module is a driver for 8-digit seven-segment MAX7219 displays. It is implemented as bit-banged SPI. Using the object's methods, you can set the intensity of the display, print words, and cascade multiple displays. It also comes with several built-in effects. Only three GPIO pins are required: SPI clk, SPI data, and SPI chip select. This modules uses the PINE64::GPIO numbering scheme. =head1 METHODS =head2 new($clock,$data,$chip_select) Takes the GPIO pin numbers that will be used to inplement the bit-bang SPI interface to the MAX7219 as arguments. Returns an object to control an 8-digit display. =head2 shift_in($leds, $digit, $n_cascaded, $delay, $latch_flag) This method is only used internally. It takes an array of a single seven-segment's LEDs, the digit position, the number of cascaded MAX7219 displays, a delay in usec (between SPI clock pulses), and a latch flag. Each individual letter of a word is shifted in one at a time. Once all the letters are shifted in, the latch_flag is set high, and displays the word. =head2 load() This method is only used internally. It manipulates the chip select line, aka latch pin. When called, it will render what has been shifted into the display. =head2 print_sentence($sentence, $delay, $clear_flag) Perhaps the most useful method. Takes a string, however long, and displays each word for $delay micro seconds. $sentence could be the text of an entire book. $clear_flag is not required. =head2 print_interleaved($string1, $string2) This method is for use with two 8-digit displays cascaded. $string1 will be displayed in the first display, $string2 in the cascaded display. =head2 turn_on($num_cascaded) Turns on the MAX7219 chip by writing to the turn on register. Takes the number of cascaded displays as an argument. Enter 1 if only using one display. =head2 set_scanlimit($num_cascaded) Writes to the scan-limit register. Sets it up to use all 8-digits of the display. Takes number of cascaded displays an arg. =head2 set_intensity($intensity); Adjusts the brightness of the display. Takes a string as an arg. Valid vlaues are: min, dim, mid, bright, max. =head2 all_off($num_cascaded) Turns off all digits. Takes number of cascaded displays as an arg. =head2 disp_teston() Turns on all segments on all digits. =head2 disp_testoff() Turns off all segments on all digits. =head2 clockwise_circles($number_iterations) Clockwise circles effect. =head2 countercq_circles($number_iterations) Counter clockwise circles effects =head2 bullets_lrtop($number_iterations) Knight-rider like bullets effect. Top row of horizontal LEDs of each digit move from right to left. =head2 bullets_rltop($number_iterations) Knight-rider like bullets effect. Top row of horizontal LEDs of each digit move from left to right. =head2 bullets_lrmid($number_iterations) Knight-rider like bullets effect. Mid row of horizontal LEDs of each digit move from left to right. =head2 bullets_rlmid($number_iterations) Knight-rider like bullets effect. Mid row of horizontal LEDs of each digit move from right to left. =head2 bullets_lrbot($number_iterations) Knight-rider like bullets effect. Bottom row of horizontal LEDs of each digit move from left to right. =head2 bullets_rlbot($number_iterations) Knight-rider like bullets effect. Bottom row of horizontal LEDs of each digit move from right to left.