Device-Chip-INA219
view release on metacpan or search on metacpan
examples/ina219-tickit-ui.pl view on Meta::CPAN
);
$vbox->add(
my $display_i = LEDDisplay->new( digits => 3, units => "mA" ),
expand => 1,
);
sub tick
{
my $vbus = $ina->read_bus_voltage->get / 1000;
$display_v->set_value( sprintf "%.3f", $vbus );
my $vshunt = $ina->read_shunt_voltage->get;
# Module has a 0.1ohm shunt resistor
my $ishunt = $vshunt / 0.1;
$display_i->set_value( sprintf "% 3.1f", $ishunt / 1000 );
$tickit->timer( after => 0.1, \&tick );
}
tick();
$tickit->run;
END {
$ina->protocol->power(0)->get if $ina;
}
package LEDDisplay {
use base qw( Tickit::Widget::Box );
use constant DIGIT_HEIGHT => 9;
use constant DIGIT_WIDTH => 10;
sub new
{
my $class = shift;
my %params = @_;
my $n_digits = delete $params{digits};
my $units = delete $params{units};
my $self = $class->SUPER::new(
%params,
child => my $hbox = Tickit::Widget::HBox->new,
# Force the size of the digits so they look nice
child_lines => DIGIT_HEIGHT,
child_cols => ( $n_digits + length $units ) * ( DIGIT_WIDTH + 2 ), # +2 for DP
);
my @digits = map { Tickit::Widget::SegmentDisplay->new(
type => "seven_dp",
) } 1 .. $n_digits;
$self->{digits} = \@digits;
$hbox->add( $_, expand => 1 ) for @digits;
$hbox->add( Tickit::Widget::SegmentDisplay->new(
type => "symb",
value => $_
), expand => 1 ) for split m//, $units;
return $self;
}
sub set_value
{
my $self = shift;
my ( $value ) = @_;
my $idx = 0;
my $digits = $self->{digits};
foreach my $v ( $value =~ m/(.\.?)/g ) {
$digits->[$idx++]->set_value( $v );
last if $idx == scalar @$digits;
}
}
}
( run in 0.493 second using v1.01-cache-2.11-cpan-71847e10f99 )