#!/usr/bin/perl use Device::BCM2835; use Data::Dumper; use Date::Calc qw(Today_and_Now); use strict; # http://www.urbanfonts.com/fonts/Arcade.htm Device::BCM2835::init() || die ('Could not init library'); # --------- set up nice constants my $latchpin = &Device::BCM2835::RPI_GPIO_P1_12; my $datapin = &Device::BCM2835::RPI_GPIO_P1_19; my $clockpin = &Device::BCM2835::RPI_GPIO_P1_23; my $output = &Device::BCM2835::BCM2835_GPIO_FSEL_OUTP; my $input = &Device::BCM2835::BCM2835_GPIO_FSEL_INPT; # --------- Device::BCM2835::gpio_fsel($latchpin,$output); Device::BCM2835::gpio_fsel($datapin,$output); Device::BCM2835::gpio_fsel($clockpin,$output); Device::BCM2835::gpio_set($latchpin); Device::BCM2835::gpio_clr($clockpin); my %font = ( 'A' => [ [0,0,1,1,1,0,0], [0,1,1,0,1,1,0], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,1,1,1,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [0,0,0,0,0,0,0], ], 'B' => [ [1,1,1,1,1,1,0], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,1,1,1,1,0], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,1,1,1,1,0], [0,0,0,0,0,0,0], ], 'C' => [ [0,1,1,1,1,1,0], [1,1,0,0,0,1,1], [1,1,0,0,0,0,0], [1,1,0,0,0,0,0], [1,1,0,0,0,0,0], [1,1,0,0,0,1,1], [0,1,1,1,1,1,0], [0,0,0,0,0,0,0], ], 'D' => [ [1,1,1,1,1,1,0], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,1,1,1,1,0], [0,0,0,0,0,0,0], ], 'E' => [ [1,1,1,1,1,1,1], [1,1,0,0,0,0,0], [1,1,0,0,0,0,0], [1,1,1,1,1,1,0], [1,1,0,0,0,0,0], [1,1,0,0,0,0,0], [1,1,1,1,1,1,1], [0,0,0,0,0,0,0], ], 'F' => [ [1,1,1,1,1,1,1], [1,1,0,0,0,0,0], [1,1,0,0,0,0,0], [1,1,1,1,1,1,0], [1,1,0,0,0,0,0], [1,1,0,0,0,0,0], [1,1,0,0,0,0,0], [0,0,0,0,0,0,0], ], 'G' => [ [0,1,1,1,1,1,0], [1,1,0,0,0,1,1], [1,1,0,0,0,0,0], [1,1,0,0,1,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [0,1,1,1,1,1,0], [0,0,0,0,0,0,0], ], 'H' => [ [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,1,1,1,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [0,0,0,0,0,0,0], ], 'I' => [ [1,1,1,1,1,1], [0,0,1,1,0,0], [0,0,1,1,0,0], [0,0,1,1,0,0], [0,0,1,1,0,0], [0,0,1,1,0,0], [1,1,1,1,1,1], [0,0,0,0,0,0], ], 'J' => [ [0,0,1,1,1,1,1], [0,0,0,0,1,1,0], [0,0,0,0,1,1,0], [0,0,0,0,1,1,0], [0,0,0,0,1,1,0], [1,1,0,0,1,1,0], [0,1,1,1,1,0,0], [0,0,0,0,0,0,0], ], 'K' => [ [1,1,0,0,0,1,1], [1,1,0,0,1,1,0], [1,1,0,1,1,0,0], [1,1,1,1,0,0,0], [1,1,1,1,1,0,0], [1,1,0,1,1,1,0], [1,1,0,0,0,1,1], [0,0,0,0,0,0,0], ], 'L' => [ [1,1,0,0,0,0,0], [1,1,0,0,0,0,0], [1,1,0,0,0,0,0], [1,1,0,0,0,0,0], [1,1,0,0,0,0,0], [1,1,0,0,0,0,0], [1,1,1,1,1,1,1], [0,0,0,0,0,0,0], ], 'M' => [ [1,0,0,0,0,0,1], [1,1,0,0,0,1,1], [1,1,1,0,1,1,1], [1,1,1,1,1,1,1], [1,1,0,1,0,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [0,0,0,0,0,0,0], ], 'N' => [ [1,1,0,0,0,1,1], [1,1,1,0,0,1,1], [1,1,1,1,0,1,1], [1,1,0,1,1,1,1], [1,1,0,0,1,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [0,0,0,0,0,0,0], ], 'O' => [ [0,1,1,1,1,1,0], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [0,1,1,1,1,1,0], [0,0,0,0,0,0,0], ], 'P' => [ [1,1,1,1,1,1,0], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,1,1,1,1,0], [1,1,0,0,0,0,0], [1,1,0,0,0,0,0], [1,1,0,0,0,0,0], [0,0,0,0,0,0,0], ], 'Q' => [ [0,1,1,1,1,1,0], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,1,1,1,1], [1,1,0,0,1,1,0], [0,1,1,1,0,1,1], [0,0,0,0,0,0,0], ], 'R' => [ [1,1,1,1,1,1,0], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,1,1,1,1,0], [1,1,0,1,1,0,0], [1,1,0,0,1,1,0], [1,1,0,0,0,1,1], [0,0,0,0,0,0,0], ], 'S' => [ [0,1,1,1,1,1,0], [1,1,0,0,0,1,1], [1,1,0,0,0,0,0], [0,1,1,1,1,1,0], [0,0,0,0,0,1,1], [1,1,0,0,0,1,1], [0,1,1,1,1,1,0], [0,0,0,0,0,0,0], ], 'T' => [ [1,1,1,1,1,1], [0,0,1,1,0,0], [0,0,1,1,0,0], [0,0,1,1,0,0], [0,0,1,1,0,0], [0,0,1,1,0,0], [0,0,1,1,0,0], [0,0,0,0,0,0], ], 'U' => [ [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [0,1,1,1,1,1,0], [0,0,0,0,0,0,0], ], 'V' => [ [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [0,1,1,0,1,1,0], [0,0,1,1,1,0,0], [0,0,0,0,0,0,0], ], 'W' => [ [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,1,0,1,1], [1,1,1,1,1,1,1], [0,1,1,0,1,1,0], [0,0,0,0,0,0,0], ], 'X' => [ [1,1,0,0,0,1,1], [0,1,1,0,1,1,0], [0,0,1,1,1,0,0], [0,0,1,1,1,0,0], [0,1,1,0,1,1,0], [1,1,0,0,0,1,1], [1,0,0,0,0,0,1], [0,0,0,0,0,0,0], ], 'Y' => [ [1,1,0,0,1,1], [1,1,0,0,1,1], [1,1,0,0,1,1], [0,1,1,1,1,1], [0,0,1,1,0,0], [0,0,1,1,0,0], [0,0,1,1,0,0], [0,0,0,0,0,0], ], 'Z' => [ [1,1,1,1,1,1,1], [0,0,0,0,1,1,0], [0,0,0,1,1,0,0], [0,0,1,1,0,0,0], [0,1,1,0,0,0,0], [1,1,0,0,0,0,0], [1,1,1,1,1,1,1], [0,0,0,0,0,0,0], ], 'a' => [ [0,0,0,0,0,0,0], [0,0,0,0,0,0,0], [0,1,1,1,1,1,0], [0,0,0,0,0,1,1], [0,1,1,1,1,1,1], [1,1,0,0,0,1,1], [0,1,1,1,1,1,1], [0,0,0,0,0,0,0], ], 'b' => [ [1,1,0,0,0,0,0], [1,1,0,0,0,0,0], [1,1,1,1,1,1,0], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,1,1,1,1,0], [0,0,0,0,0,0,0], ], 'c' => [ [0,0,0,0,0,0,0], [0,0,0,0,0,0,0], [0,1,1,1,1,1,0], [1,1,0,0,0,1,1], [1,1,0,0,0,0,0], [1,1,0,0,0,1,1], [0,1,1,1,1,1,0], [0,0,0,0,0,0,0], ], 'd' => [ [0,0,0,0,0,1,1], [0,0,0,0,0,1,1], [1,1,1,1,1,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [0,1,1,1,1,1,1], [0,0,0,0,0,0,0], ], 'e' => [ [0,0,0,0,0,0,0], [0,0,0,0,0,0,0], [0,1,1,1,1,1,0], [1,1,0,0,0,1,1], [1,1,1,1,1,1,1], [1,1,0,0,0,0,0], [0,1,1,1,1,1,0], [0,0,0,0,0,0,0], ], 'f' => [ [0,0,1,1,1], [0,1,1,0,0], [1,1,1,1,0], [0,1,1,0,0], [0,1,1,0,0], [0,1,1,0,0], [0,1,1,0,0], [0,0,0,0,0], ], 'g' => [ [0,0,0,0,0,0,0], [0,1,1,1,1,1,0], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [0,1,1,1,1,1,1], [0,0,0,0,0,1,1], [0,1,1,1,1,1,0], ], 'h' => [ [1,1,0,0,0,0,0], [1,1,0,0,0,0,0], [1,1,1,1,1,1,0], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [0,0,0,0,0,0,0], ], 'i' => [ [1,1], [0,0], [1,1], [1,1], [1,1], [1,1], [1,1], [0,0], ], 'j' => [ [0,1,1], [0,0,0], [1,1,1], [0,1,1], [0,1,1], [0,1,1], [0,1,1], [1,1,1], ], 'k' => [ [1,1,0,0,0,0], [1,1,0,0,0,0], [1,1,0,0,1,1], [1,1,0,1,1,0], [1,1,1,1,0,0], [1,1,0,1,1,0], [1,1,0,0,1,1], [0,0,0,0,0,0], ], 'l' => [ [1,1], [1,1], [1,1], [1,1], [1,1], [1,1], [1,1], [0,0], ], 'm' => [ [0,0,0,0,0,0,0], [0,0,0,0,0,0,0], [1,1,1,0,1,1,0], [1,1,0,1,0,1,1], [1,1,0,1,0,1,1], [1,1,0,1,0,1,1], [1,1,0,1,0,1,1], [0,0,0,0,0,0,0], ], 'n' => [ [0,0,0,0,0,0], [0,0,0,0,0,0], [1,1,1,1,1,0], [1,1,0,0,1,1], [1,1,0,0,1,1], [1,1,0,0,1,1], [1,1,0,0,1,1], [0,0,0,0,0,0], ], 'o' => [ [0,0,0,0,0,0,0], [0,0,0,0,0,0,0], [0,1,1,1,1,1,0], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [0,1,1,1,1,1,0], [0,0,0,0,0,0,0], ], 'p' => [ [0,0,0,0,0,0,0], [0,0,0,0,0,0,0], [1,1,1,1,1,1,0], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,1,1,1,1,0], [1,1,0,0,0,0,0], [1,1,0,0,0,0,0], ], 'q' => [ [0,0,0,0,0,0,0], [0,0,0,0,0,0,0], [0,1,1,1,1,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [0,1,1,1,1,1,1], [0,0,0,0,0,1,1], [0,0,0,0,0,1,1], ], 'r' => [ [0,0,0,0,0], [0,0,0,0,0], [1,1,0,1,1], [1,1,1,0,0], [1,1,0,0,0], [1,1,0,0,0], [1,1,0,0,0], [0,0,0,0,0], ], 's' => [ [0,0,0,0,0,0,0], [0,0,0,0,0,0,0], [0,1,1,1,1,1,0], [1,1,0,0,0,0,0], [0,1,1,1,1,1,0], [0,0,0,0,0,1,1], [1,1,1,1,1,1,0], [0,0,0,0,0,0,0], ], 't' => [ [0,1,1,0,0], [0,1,1,0,0], [1,1,1,1,0], [0,1,1,0,0], [0,1,1,0,0], [0,1,1,0,0], [0,0,1,1,1], [0,0,0,0,0], ], 'u' => [ [0,0,0,0,0,0,0], [0,0,0,0,0,0,0], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [0,1,1,1,1,1,1], [0,0,0,0,0,0,0], ], 'v' => [ [0,0,0,0,0,0,0], [0,0,0,0,0,0,0], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [0,1,1,0,1,1,0], [0,0,1,1,1,0,0], [0,0,0,0,0,0,0], ], 'w' => [ [0,0,0,0,0,0,0], [0,0,0,0,0,0,0], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,1,0,1,1], [0,1,1,0,1,1,0], [0,0,0,0,0,0,0], ], 'x' => [ [0,0,0,0,0,0,0], [0,0,0,0,0,0,0], [1,1,0,0,0,1,1], [0,1,1,0,1,1,0], [0,0,1,1,1,0,0], [0,1,1,0,1,1,0], [1,1,0,0,0,1,1], [0,0,0,0,0,0,0], ], 'y' => [ [0,0,0,0,0,0,0], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [0,1,1,1,1,1,1], [0,0,0,0,0,1,1], [0,1,1,1,1,1,0], ], 'z' => [ [0,0,0,0,0,0,0], [0,0,0,0,0,0,0], [1,1,1,1,1,1,1], [0,0,0,0,1,1,0], [0,0,1,1,1,0,0], [0,1,1,0,0,0,0], [1,1,1,1,1,1,1], [0,0,0,0,0,0,0], ], ' ' => [ [0,0,0,0,0,0,0], [0,0,0,0,0,0,0], [0,0,0,0,0,0,0], [0,0,0,0,0,0,0], [0,0,0,0,0,0,0], [0,0,0,0,0,0,0], [0,0,0,0,0,0,0], [0,0,0,0,0,0,0], ], '!' => [ [0,0,0,0,0,1,1], [0,0,0,0,1,1,1], [0,0,0,1,1,1,1], [0,0,1,1,1,0,0], [0,1,1,0,0,0,0], [0,0,0,0,0,0,0], [1,1,0,0,0,0,0], [0,0,0,0,0,0,0], ], '"' => [ [1,1,0,1,1], [1,1,0,1,1], [0,1,0,0,1], [0,0,0,0,0], [0,0,0,0,0], [0,0,0,0,0], [0,0,0,0,0], [0,0,0,0,0], ], '#' => [ [0,1,1,0,1,1,0], [0,1,1,0,1,1,0], [1,1,1,1,1,1,1], [0,1,1,0,1,1,0], [1,1,1,1,1,1,1], [0,1,1,0,1,1,0], [0,1,1,0,1,1,0], [0,0,0,0,0,0,0], ], '$' => [ [0,0,1,0], [0,1,1,1], [1,0,0,0], [1,1,1,0], [0,0,0,1], [1,1,1,0], [0,0,1,0], [0,0,0,0], ], '%' => [ [0,0,0,0,0,0], [1,1,0,0,1,1], [1,1,0,1,1,0], [0,0,1,1,0,0], [0,1,1,0,1,1], [1,1,0,0,1,1], [0,0,0,0,0,0], [0,0,0,0,0,0], ], '&' => [ [0,1,1,0,0], [1,0,0,1,0], [1,0,1,0,0], [0,1,0,0,0], [1,0,1,0,1], [1,0,0,1,0], [0,1,1,0,1], [0,0,0,0,0], ], "'" => [ [1,1], [1,1], [0,1], [0,0], [0,0], [0,0], [0,0], [0,0], ], '(' => [ [0,0,1,1], [0,1,1,0], [1,1,0,0], [1,1,0,0], [1,1,0,0], [0,1,1,0], [0,0,1,1], [0,0,0,0], ], ')' => [ [1,1,0,0], [0,1,1,0], [0,0,1,1], [0,0,1,1], [0,0,1,1], [0,1,1,0], [1,1,0,0], [0,0,0,0], ], '*' => [ [1,0,1], [0,1,0], [1,0,1], [0,0,0], [0,0,0], [0,0,0], [0,0,0], [0,0,0], ], '+' => [ [0,0,1,1,0,0], [0,0,1,1,0,0], [1,1,1,1,1,1], [1,1,1,1,1,1], [0,0,1,1,0,0], [0,0,1,1,0,0], [0,0,0,0,0,0], [0,0,0,0,0,0], ], ',' => [ [0,0,0], [0,0,0], [0,0,0], [0,0,0], [0,0,0], [0,1,1], [0,1,1], [1,1,0], ], '-' => [ [0,0,0,0,0], [0,0,0,0,0], [0,0,0,0,0], [1,1,1,1,1], [0,0,0,0,0], [0,0,0,0,0], [0,0,0,0,0], [0,0,0,0,0], ], '.' => [ [0,0,0], [0,0,0], [0,0,0], [0,0,0], [0,0,0], [0,1,1], [0,1,1], [0,0,0], ], '/' => [ [0,0,0,0,0,1], [0,0,0,0,1,1], [0,0,0,1,1,0], [0,0,1,1,0,0], [0,0,1,1,0,0], [0,1,1,0,0,0], [1,1,0,0,0,0], [0,0,0,0,0,0], ], '0' => [ [0,1,1,1,1,0], [1,1,0,0,1,1], [1,1,0,0,1,1], [1,1,0,0,1,1], [1,1,0,0,1,1], [1,1,0,0,1,1], [0,1,1,1,1,0], [0,0,0,0,0,0], ], '1' => [ [0,0,1,1,0,0], [0,1,1,1,0,0], [0,0,1,1,0,0], [0,0,1,1,0,0], [0,0,1,1,0,0], [0,0,1,1,0,0], [1,1,1,1,1,1], [0,0,0,0,0,0], ], '2' => [ [0,1,1,1,1,1,0], [1,1,0,0,0,1,1], [0,0,0,0,1,1,0], [0,0,1,1,1,0,0], [0,0,1,1,0,0,0], [0,1,1,0,0,0,0], [1,1,1,1,1,1,0], [0,0,0,0,0,0,0], ], '3' => [ [0,1,1,1,1,1,0], [1,1,0,0,0,1,1], [0,0,0,0,0,1,1], [0,0,0,1,1,1,0], [0,0,0,0,0,1,1], [1,1,0,0,0,1,1], [0,1,1,1,1,1,0], [0,0,0,0,0,0,0], ], '4' => [ [0,0,0,1,1,1,0], [0,0,1,1,1,1,0], [0,1,1,0,1,1,0], [1,1,0,0,1,1,0], [1,1,1,1,1,1,1], [0,0,0,0,1,1,0], [0,0,0,0,1,1,0], [0,0,0,0,0,0,0], ], '5' => [ [1,1,1,1,1,1,0], [1,1,0,0,0,0,0], [1,1,1,1,1,1,0], [0,0,0,0,0,1,1], [0,0,0,0,0,1,1], [1,1,0,0,0,1,1], [0,1,1,1,1,1,0], [0,0,0,0,0,0,0], ], '6' => [ [0,1,1,1,1,1,0], [1,1,0,0,0,1,1], [1,1,0,0,0,0,0], [1,1,1,1,1,1,0], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [0,1,1,1,1,1,0], [0,0,0,0,0,0,0], ], '7' => [ [1,1,1,1,1,1,1], [0,0,0,0,1,1,0], [0,0,0,1,1,0,0], [0,0,1,1,0,0,0], [0,0,1,1,0,0,0], [0,0,1,1,0,0,0], [0,0,1,1,0,0,0], [0,0,0,0,0,0,0], ], '8' => [ [0,1,1,1,1,1,0], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [0,1,1,1,1,1,0], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [0,1,1,1,1,1,0], [0,0,0,0,0,0,0], ], '9' => [ [0,1,1,1,1,1,0], [1,1,0,0,0,1,1], [1,1,0,0,0,1,1], [0,1,1,1,1,1,1], [0,0,0,0,0,1,1], [0,0,0,0,1,1,0], [0,0,1,1,1,0,0], [0,0,0,0,0,0,0], ], ':' => [ [0,0], [1,1], [1,1], [0,0], [1,1], [1,1], [0,0], [0,0], ], ';' => [ [0,0], [1,1], [1,1], [0,0], [1,1], [1,1], [0,1], [0,0], ], '<' => [ [0,0,0,0], [0,0,1,1], [0,1,1,0], [1,1,0,0], [0,1,1,0], [0,0,1,1], [0,0,0,0], [0,0,0,0], ], '=' => [ [0,0,0,0,0], [0,0,0,0,0], [1,1,1,1,1], [0,0,0,0,0], [1,1,1,1,1], [0,0,0,0,0], [0,0,0,0,0], [0,0,0,0,0], ], '>' => [ [0,0,0,0], [1,1,0,0], [0,1,1,0], [0,0,1,1], [0,1,1,0], [1,1,0,0], [0,0,0,0], [0,0,0,0], ], '?' => [ [0,0,0,0,0,0], [0,1,1,1,1,0], [1,1,0,0,1,1], [0,0,0,1,1,0], [0,0,1,1,0,0], [0,0,0,0,0,0], [0,0,1,1,0,0], [0,0,1,1,0,0], ], '@' => [ [0,1,1,1,1,1,0], [1,0,0,0,0,0,1], [1,0,1,1,1,0,1], [1,0,1,1,0,1,1], [1,0,0,0,0,0,0], [1,0,0,0,0,0,0], [0,1,1,1,1,1,1], [0,0,0,0,0,0,0], ], '[' => [ [1,1,1], [1,1,0], [1,1,0], [1,1,0], [1,1,0], [1,1,0], [1,1,1], [0,0,0], ], '\\' => [ [1,1,0,0,0,0,0], [0,1,1,0,0,0,0], [0,0,1,1,0,0,0], [0,0,0,1,1,0,0], [0,0,0,0,1,1,0], [0,0,0,0,0,1,1], [0,0,0,0,0,0,1], [0,0,0,0,0,0,0], ], ']' => [ [1,1,1], [0,1,1], [0,1,1], [0,1,1], [0,1,1], [0,1,1], [1,1,1], [0,0,0], ], ); while(1){ &scroll(&process(' ' . `uptime` . ' ')); } sub scroll{ my ($msg) = @_; for (my $xoffset = 0;$xoffset < (scalar(@{@$msg[0]})-8);$xoffset++){ &display($msg,3,$xoffset,0); } } sub process{ my ($text) = @_; my @msg=([],[],[],[],[],[],[],[]); foreach my $char(split(//,$text)){ foreach my $row(0..7){ my $test = $font{$char}[$row]; foreach my $col(@$test){ push @msg[$row],$col; } push @msg[$row],0; } } return \@msg; } sub display{ my ($bitmap,$duration,$xoffset,$yoffset) = @_; my @rowmap = (1,0,0,0,0,0,0,0); for (1..$duration){ for (my $row=0;$row<=7;$row++){ foreach (reverse @rowmap){ Device::BCM2835::gpio_write($datapin,$_); Device::BCM2835::gpio_set($clockpin); Device::BCM2835::gpio_clr($clockpin); } @rowmap = (pop(@rowmap),@rowmap); for(my $col=7;$col>=0;$col--){ Device::BCM2835::gpio_write($datapin,$$bitmap[$row+$yoffset][$col+$xoffset]); Device::BCM2835::gpio_set($clockpin); Device::BCM2835::gpio_clr($clockpin); } Device::BCM2835::gpio_clr($latchpin); Device::BCM2835::gpio_set($latchpin); Device::BCM2835::delay(2); } } }