fit-statUSB: Color Explorer App
Posted: Wed Aug 15, 2018 3:23 am
Overview
How many distinct colors can fit-statUSB display? The answer to that question is 256 Red x 256 Green x 256 Blue which equals 16,777,216. Realistically, the average human eye can't discern that many colors, but a bit of fun can be had by trying.
The perl app included in this post provides the user with a simple method of quickly exploring the various colors which fit-statUSB can display via 3 slide controls (red, green, and blue). The resulting color combination is displayed both on-screen and by fit-statUSB. The app prominently displays the corresponding hex code. Should the user arrive at a desirable color, the hex code can be written down for further use in applications.
Examples
Shade of Purple
Shade of Yellow
Shade of Blue-Green
Perl App
#!/usr/bin/perl -w
#
#fitStatColor.pl
# Darryl Hassell 8/14/2018
use Tk;
use Device::SerialPort;
use Time::HiRes ('sleep');
# Define & Initialize Variables
our $RedDec = 255;
our $GreenDec = 255;
our $Bluedec = 255;
our $RedHex = 'FF0000';
our $GreenHex = '00FF00';
our $BlueHex = '0000FF';
our $ColorString = '#FFFFFF';
# Configure Serial Port
my $port = Device::SerialPort -> new("/dev/ttyACM0");
$port -> baudrate(115200);
$port -> databits(8);
$port -> parity("none");
$port -> stopbits(1);
$port -> write_settings;
# Set Sleep Delay After Writes in Seconds
our $delay = 0.1;
#Initialize fit-statUSB to 10 mSec Fade
$port -> write("F10\n");
$port -> purge_rx;
sleep(0.5);
# Initialize fit-statUSB to Max Brightness White Then Off
$port -> write("#FFFFFF\n");
$port -> purge_rx;
sleep(1);
$port -> write("#000000\n");
# Create Main Window
$WinMain = MainWindow->new;
$WinMain -> resizable (0,0);
# Label Main Window
$myframe_label = $WinMain -> Frame ->pack();
$myframe_label -> Label (-text => 'fit-statUSB Color Explorer', -foreground => "black", -font => "helvetica 15 bold")->pack(-ipadx => 10,-ipady => 5);
# Create Window For All Controls
$myframe_Control = $WinMain -> Frame (-relief => 'groove', -bd => 5);
$myframe_Control -> Label (-text => 'Color Slide Controls', -foreground => "black", -font => "helvetica 12 bold")->pack(-ipadx => 110,-ipady => 5);
# Create Red Program Window and Slider
$myframe_Red = $myframe_Control -> Frame (-relief => 'groove', -bd => 5);
# Red Slider
$RedDec = 0;
$myframe_Red -> Scale(
-label => 'Red',
-font => 'helvetica 12 bold',
-foreground => "black",
-background => "#FF0000",
-orient => 'vertical',
-from => 255,
-to => 0,
-digits =>1,
-resolution => 1,
-tickinterval => 10,
-showvalue => 'yes',
-length => '4.0i',
-variable => \$RedDec,
-command => sub{ print "Red Decimal Value: $RedDec\n"; }
) -> pack( -side => 'left' );
$myframe_Red -> pack (-side => 'left');
$myframe_Red -> pack (-padx => 5, -pady => 5);
# Create Green Program Window and Slider
$myframe_Green = $myframe_Control -> Frame (-relief => 'groove', -bd => 5);
# Green Slider
$GreenDec = 0;
$myframe_Green -> Scale(
-label => 'Green',
-font => 'helvetica 12 bold',
-foreground => "black",
-background => "#00FF00",
-orient => 'vertical',
-from => 255,
-to => 0,
-digits =>1,
-resolution => 1,
-tickinterval => 10,
-showvalue => 'yes',
-length => '4.0i',
-variable => \$GreenDec,
-command => sub{ print "Green Decimal Value: $GreenDec\n"; }
) -> pack( -side => 'left' );
$myframe_Green -> pack (-side => 'left');
$myframe_Green -> pack (-padx => 5, -pady => 5);
# Create Blue Program Window and Slider
$myframe_Blue = $myframe_Control -> Frame (-relief => 'groove', -bd => 5);
# Blue Slider
$BlueDec = 0;
$myframe_Blue-> Scale(
-label => 'Blue',
-font => 'helvetica 12 bold',
-foreground => "white",
-background => "#0000FF",
-orient => 'vertical',
-from => 255,
-to => 0,
-digits =>1,
-resolution => 1,
-tickinterval => 10,
-showvalue => 'yes',
-length => '4.0i',
-variable => \$BlueDec,
-command => sub{ print "Blue Decimal Value: $BlueDec\n"; }
) -> pack( -side => 'left' );
$myframe_Blue -> pack (-side => 'left');
$myframe_Blue -> pack (-padx => 5, -pady => 5);
# Exit Button
$exitbutton = $myframe_Control -> Button (-text => 'Exit', -command => \&Exit, -foreground => 'white', -background => 'steelblue');
$exitbutton -> pack (-side => 'right', -padx => 10, -pady => 5,);
$myframe_Control -> pack (-side => 'top');
$myframe_Control -> pack (-padx => 10, -pady => 5);
# Create Window For Displaying Hex Value of Color
our $myframe_Color = $WinMain -> Frame (-bd => 75);
$myframe_Color -> Label (-textvariable => \$ColorString, -foreground => 'black', -font => "helvetica 32 bold")->pack(-ipadx => 125,-ipady => 5);
$myframe_Color -> pack (-side => 'top');
$myframe_Color -> pack (-padx => 10, -pady => 5);
$WinMain -> repeat(500, \&BuildColor);
MainLoop();
############### Subroutines ###############
sub BuildColor {
# Red Hex Value
if ($RedDec < 16){
$RedHex = "0".sprintf("%X", $RedDec);
}
else {
$RedHex = sprintf("%X", $RedDec);
}
# Green Hex Value
if ($GreenDec < 16){
$GreenHex = "0".sprintf("%X", $GreenDec);
}
else {
$GreenHex = sprintf("%X", $GreenDec);
}
# Blue Hex Value
if ($BlueDec < 16){
$BlueHex = "0".sprintf("%X", $BlueDec);
}
else {
$BlueHex = sprintf("%X", $BlueDec);
}
# Build Color String
$ColorString = "#".$RedHex.$GreenHex.$BlueHex;
$myframe_Color -> configure (-background => $ColorString);
print "$ColorString\n";
$port -> write("$ColorString\n");
$port -> purge_rx;
}
sub Exit {
$port -> write("#000000\n");
$port -> purge_rx;
sleep($delay);
exit;
}
Conclusions
fit-statUSB due to its very large number of available colors is suitable for a wide variety of applications. Whether for fun or for serious pursuits, fit-statUSB has something to offer where a wide palette of colors is required.
How many distinct colors can fit-statUSB display? The answer to that question is 256 Red x 256 Green x 256 Blue which equals 16,777,216. Realistically, the average human eye can't discern that many colors, but a bit of fun can be had by trying.
The perl app included in this post provides the user with a simple method of quickly exploring the various colors which fit-statUSB can display via 3 slide controls (red, green, and blue). The resulting color combination is displayed both on-screen and by fit-statUSB. The app prominently displays the corresponding hex code. Should the user arrive at a desirable color, the hex code can be written down for further use in applications.
Examples
Shade of Purple
Shade of Yellow
Shade of Blue-Green
Perl App
#!/usr/bin/perl -w
#
#fitStatColor.pl
# Darryl Hassell 8/14/2018
use Tk;
use Device::SerialPort;
use Time::HiRes ('sleep');
# Define & Initialize Variables
our $RedDec = 255;
our $GreenDec = 255;
our $Bluedec = 255;
our $RedHex = 'FF0000';
our $GreenHex = '00FF00';
our $BlueHex = '0000FF';
our $ColorString = '#FFFFFF';
# Configure Serial Port
my $port = Device::SerialPort -> new("/dev/ttyACM0");
$port -> baudrate(115200);
$port -> databits(8);
$port -> parity("none");
$port -> stopbits(1);
$port -> write_settings;
# Set Sleep Delay After Writes in Seconds
our $delay = 0.1;
#Initialize fit-statUSB to 10 mSec Fade
$port -> write("F10\n");
$port -> purge_rx;
sleep(0.5);
# Initialize fit-statUSB to Max Brightness White Then Off
$port -> write("#FFFFFF\n");
$port -> purge_rx;
sleep(1);
$port -> write("#000000\n");
# Create Main Window
$WinMain = MainWindow->new;
$WinMain -> resizable (0,0);
# Label Main Window
$myframe_label = $WinMain -> Frame ->pack();
$myframe_label -> Label (-text => 'fit-statUSB Color Explorer', -foreground => "black", -font => "helvetica 15 bold")->pack(-ipadx => 10,-ipady => 5);
# Create Window For All Controls
$myframe_Control = $WinMain -> Frame (-relief => 'groove', -bd => 5);
$myframe_Control -> Label (-text => 'Color Slide Controls', -foreground => "black", -font => "helvetica 12 bold")->pack(-ipadx => 110,-ipady => 5);
# Create Red Program Window and Slider
$myframe_Red = $myframe_Control -> Frame (-relief => 'groove', -bd => 5);
# Red Slider
$RedDec = 0;
$myframe_Red -> Scale(
-label => 'Red',
-font => 'helvetica 12 bold',
-foreground => "black",
-background => "#FF0000",
-orient => 'vertical',
-from => 255,
-to => 0,
-digits =>1,
-resolution => 1,
-tickinterval => 10,
-showvalue => 'yes',
-length => '4.0i',
-variable => \$RedDec,
-command => sub{ print "Red Decimal Value: $RedDec\n"; }
) -> pack( -side => 'left' );
$myframe_Red -> pack (-side => 'left');
$myframe_Red -> pack (-padx => 5, -pady => 5);
# Create Green Program Window and Slider
$myframe_Green = $myframe_Control -> Frame (-relief => 'groove', -bd => 5);
# Green Slider
$GreenDec = 0;
$myframe_Green -> Scale(
-label => 'Green',
-font => 'helvetica 12 bold',
-foreground => "black",
-background => "#00FF00",
-orient => 'vertical',
-from => 255,
-to => 0,
-digits =>1,
-resolution => 1,
-tickinterval => 10,
-showvalue => 'yes',
-length => '4.0i',
-variable => \$GreenDec,
-command => sub{ print "Green Decimal Value: $GreenDec\n"; }
) -> pack( -side => 'left' );
$myframe_Green -> pack (-side => 'left');
$myframe_Green -> pack (-padx => 5, -pady => 5);
# Create Blue Program Window and Slider
$myframe_Blue = $myframe_Control -> Frame (-relief => 'groove', -bd => 5);
# Blue Slider
$BlueDec = 0;
$myframe_Blue-> Scale(
-label => 'Blue',
-font => 'helvetica 12 bold',
-foreground => "white",
-background => "#0000FF",
-orient => 'vertical',
-from => 255,
-to => 0,
-digits =>1,
-resolution => 1,
-tickinterval => 10,
-showvalue => 'yes',
-length => '4.0i',
-variable => \$BlueDec,
-command => sub{ print "Blue Decimal Value: $BlueDec\n"; }
) -> pack( -side => 'left' );
$myframe_Blue -> pack (-side => 'left');
$myframe_Blue -> pack (-padx => 5, -pady => 5);
# Exit Button
$exitbutton = $myframe_Control -> Button (-text => 'Exit', -command => \&Exit, -foreground => 'white', -background => 'steelblue');
$exitbutton -> pack (-side => 'right', -padx => 10, -pady => 5,);
$myframe_Control -> pack (-side => 'top');
$myframe_Control -> pack (-padx => 10, -pady => 5);
# Create Window For Displaying Hex Value of Color
our $myframe_Color = $WinMain -> Frame (-bd => 75);
$myframe_Color -> Label (-textvariable => \$ColorString, -foreground => 'black', -font => "helvetica 32 bold")->pack(-ipadx => 125,-ipady => 5);
$myframe_Color -> pack (-side => 'top');
$myframe_Color -> pack (-padx => 10, -pady => 5);
$WinMain -> repeat(500, \&BuildColor);
MainLoop();
############### Subroutines ###############
sub BuildColor {
# Red Hex Value
if ($RedDec < 16){
$RedHex = "0".sprintf("%X", $RedDec);
}
else {
$RedHex = sprintf("%X", $RedDec);
}
# Green Hex Value
if ($GreenDec < 16){
$GreenHex = "0".sprintf("%X", $GreenDec);
}
else {
$GreenHex = sprintf("%X", $GreenDec);
}
# Blue Hex Value
if ($BlueDec < 16){
$BlueHex = "0".sprintf("%X", $BlueDec);
}
else {
$BlueHex = sprintf("%X", $BlueDec);
}
# Build Color String
$ColorString = "#".$RedHex.$GreenHex.$BlueHex;
$myframe_Color -> configure (-background => $ColorString);
print "$ColorString\n";
$port -> write("$ColorString\n");
$port -> purge_rx;
}
sub Exit {
$port -> write("#000000\n");
$port -> purge_rx;
sleep($delay);
exit;
}
Conclusions
fit-statUSB due to its very large number of available colors is suitable for a wide variety of applications. Whether for fun or for serious pursuits, fit-statUSB has something to offer where a wide palette of colors is required.