use warnings;
use strict;
+package gpio;
+
use Data::Dump qw(dump);
my @last;
+my $mode;
-while(1) {
+sub pins {
my @pcf = `gpio -x pcf8591:120:0x48 readall`;
my @gpio = `gpio -g readall`;
my $i = 0;
-my $mode;
foreach (@gpio) {
chomp;
#warn "# mode = ", dump($mode);
+} #/gpio
+
sub pin2dir {
my $pin = shift;
my ($p) = grep { /$pin/ } keys %$mode;
warn "# pin2dir $pin = $dir\n";
return $dir;
}
-
-my $cmd = <STDIN>;
-chomp $cmd;
-if ( $cmd =~ m/^(\d+)$/ ) {
- my $pin = $1;
- system "gpio -g mode $pin out" unless pin2dir($pin) =~ m/OUT/i;
-
- my $v = `gpio -g read $pin`;
- warn "# pin $pin ", $v;
- $v ^= 1;
- system "gpio -g write $pin $v";
+sub cmd {
+ my $cmd = shift;
+ chomp $cmd;
+ if ( $cmd =~ m/^(\d+)$/ ) {
+ my $pin = $1;
+ system "gpio -g mode $pin out" unless pin2dir($pin) =~ m/OUT/i;
+
+ my $v = `gpio -g read $pin`;
+ warn "# pin $pin ", $v;
+ $v ^= 1;
+ system "gpio -g write $pin $v";
+ }
}
+package main;
+
+return 1 if caller; # used as module
-} #/while
+while(1) {
+ gpio::pins();
+ my $cmd = <STDIN>;
+ gpio::cmd($cmd);
+}