View unanswered posts | View active topics It is currently Mon Dec 17, 2018 2:20 am



Reply to topic  [ 1 post ] 
 fit-statUSB: Perl Blink Demo 
Author Message

Joined: Mon May 28, 2012 12:25 pm
Posts: 104
Post fit-statUSB: Perl Blink Demo
Overview

Vivid, flashing lights are a great way to draw attention to something critical or otherwise important. fit-statUSB can blink using vivid colors, and, as a result, fit-statUSB is an excellent tool for getting someone's attention.

This post includes a perl app which demonstrates some of fit-statUSB's blinking capabilities. The user can select the first color, second color, speed, and first color on- time. Many combinations are possible.




Examples

Red/Blue Blinking - 500 mSec Period and First Color On 50% Of Time
Attachment:
Blink_example_window .png
Blink_example_window .png [ 29.22 KiB | Viewed 516 times ]


Attachment:
blink_fitstatUSB.gif
blink_fitstatUSB.gif [ 1.91 MiB | Viewed 516 times ]



Many Combinations Are Possible
Attachment:
Blink_demo_windows.jpeg
Blink_demo_windows.jpeg [ 254.69 KiB | Viewed 516 times ]





Perl App

#!/usr/bin/perl -w
#
#fitStatBlink.pl

# Darryl Hassell 8/11/2018

use Tk;
use Device::SerialPort;
use Time::HiRes ('sleep');

# Define & Initialize Variables

our $first_color = 'FF0000';
our $second_color = '0000FF';

our $speed = 50;
our $period = 1000;
our $first_color_percent = 50;
our $first_color_on = 500;
our $second_color_on = 500;

# 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
$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 Blink Demo', -foreground => "black", -font => "helvetica 15 bold")->pack(-ipadx => 10,-ipady => 5);

# Create 1st Color Program Window and Buttons
$myframe_first_color = $WinMain -> Frame (-relief => 'groove', -bd => 5);
$myframe_first_color -> Label(-text => 'First Color', -foreground => 'black', -font => "helvetica 12 bold") -> pack ();

# Red Color Select Button
$first_red_button = $myframe_first_color -> Button (-text => ' Red ', -command => \&First_Red_button, -foreground => 'black', -background => 'gray');
$first_red_button -> pack (-side => 'left', -padx => 5, -pady => 5);

# Green Color Select Button
$first_green_button = $myframe_first_color -> Button (-text => 'Green', -command => \&First_Green_button, -foreground => 'black', -background => 'gray');
$first_green_button -> pack (-side => 'left', -padx => 5, -pady => 5);

# Blue Color Select Button
$first_blue_button = $myframe_first_color -> Button (-text => 'Blue', -command => \&First_Blue_button, -foreground => 'black', -background => 'gray');
$first_blue_button -> pack (-side => 'left', -padx => 5, -pady => 5);

# White Color Select Button
$first_white_button = $myframe_first_color -> Button (-text => 'White', -command => \&First_White_button, -foreground => 'black', -background => 'gray');
$first_white_button -> pack (-side => 'left', -padx => 5, -pady => 5);

# Off Color Select Button
$first_off_button = $myframe_first_color -> Button (-text => ' Off ', -command => \&First_Off_button, -foreground => 'black', -background => 'gray');
$first_off_button -> pack (-side => 'left', -padx => 5, -pady => 5);

$myframe_first_color -> pack (-side => 'top');
$myframe_first_color -> pack (-padx => 10, -pady => 5);




# Create 2cnd Color Program Window and Buttons
$myframe_second_color = $WinMain -> Frame (-relief => 'groove', -bd => 5);
$myframe_second_color -> Label(-text => 'Second Color', -foreground => 'black', -font => "helvetica 12 bold") -> pack ();

# Red Color Select Button
$second_red_button = $myframe_second_color -> Button (-text => ' Red ', -command => \&Second_Red_button, -foreground => 'black', -background => 'gray');
$second_red_button -> pack (-side => 'left', -padx => 5, -pady => 5);

# Green Color Select Button
$second_green_button = $myframe_second_color -> Button (-text => 'Green', -command => \&Second_Green_button, -foreground => 'black', -background => 'gray');
$second_green_button -> pack (-side => 'left', -padx => 5, -pady => 5);

# Blue Color Select Button
$second_blue_button = $myframe_second_color -> Button (-text => 'Blue', -command => \&Second_Blue_button, -foreground => 'black', -background => 'gray');
$second_blue_button -> pack (-side => 'left', -padx => 5, -pady => 5);

# White Color Select Button
$second_white_button = $myframe_second_color -> Button (-text => 'White', -command => \&Second_White_button, -foreground => 'black', -background => 'gray');
$second_white_button -> pack (-side => 'left', -padx => 5, -pady => 5);

# Off Color Select Button
$second_off_button = $myframe_second_color -> Button (-text => ' Off ', -command => \&Second_Off_button, -foreground => 'black', -background => 'gray');
$second_off_button -> pack (-side => 'left', -padx => 5, -pady => 5);

$myframe_second_color -> pack (-side => 'top');
$myframe_second_color -> pack (-padx => 10, -pady => 5);



# Create Speed Program Window and Slider
$myframe_speed = $WinMain -> Frame (-relief => 'groove', -bd => 5);

# Speed-% Slider
$speed = 50;
$myframe_speed -> Scale(
-label => 'Speed - %',
-font => 'helvetica 10 bold',
-orient => 'horizontal',
-from => 0,
-to => 100,
-digits =>1,
-resolution => 0.05,
-tickinterval => 20,
-showvalue => 'yes',
-length => '3.5i',
-variable => \$speed,
-command => sub{ print "Speed - %: $speed\n"; }
) -> pack( -side => 'top' );

$myframe_speed -> pack (-side => 'top');
$myframe_speed -> pack (-padx => 2, -pady => 5);


# Create First Color Time Program Window and Slider
$myframe_first_color = $WinMain -> Frame (-relief => 'groove', -bd => 5);

# First Color % Slider
$first_color_percent = 50;
$myframe_first_color -> Scale(
-label => 'First Color On Time - %',
-font => 'helvetica 10 bold',
-orient => 'horizontal',
-from => 0,
-to => 100,
-digits =>1,
-resolution => 0.05,
-tickinterval => 20,
-showvalue => 'yes',
-length => '3.5i',
-variable => \$first_color_percent,
-command => sub{ print "First Color On Time - %: $first_color_percent\n"; }
) -> pack( -side => 'top' );

$myframe_first_color -> pack (-side => 'top');
$myframe_first_color -> pack (-padx => 2, -pady => 5);



# Create Write Ctrl Program Window and Buttons
$myframe_control = $WinMain -> Frame (-relief => 'groove', -bd => 5);
$myframe_control -> Label (-text => 'Control Buttons', -foreground => "black", -font => "helvetica 12 bold")->pack(-ipadx => 110,-ipady => 5);

$writebutton = $myframe_control -> Button (-text => 'Write', -command => \&Ctrl_fitstatUSB, -foreground => 'black', -background => 'lightblue');
$writebutton -> pack (-side => 'left', -padx => 10, -pady => 5);

$exitbutton = $myframe_control -> Button (-text => 'Exit', -command => \&Exit, -foreground => 'black', -background => 'lightblue');
$exitbutton -> pack (-side => 'right', -padx => 10, -pady => 5,);

$myframe_control -> pack (-side => 'bottom');
$myframe_control -> pack (-padx => 10, -pady => 5);


# $WinMain -> repeat(500);


MainLoop();

############### Subroutines ###############

sub Exit {

$port -> write("#000000\n");
$port -> purge_rx;
sleep($delay);
exit;
}


sub First_Red_button {

$first_color = 'FF0000';
$first_red_button -> configure (-foreground => "white", -background => "red");
$first_green_button -> configure (-foreground => "black", -background => "gray");
$first_blue_button -> configure (-foreground => "black", -background => "gray");
$first_white_button -> configure (-foreground => "black", -background => "gray");
$first_off_button -> configure (-foreground => "black", -background => "gray");
sleep($delay);
}


sub First_Green_button {

$first_color = '00FF00';
$first_red_button -> configure (-foreground => "black", -background => "gray");
$first_green_button -> configure (-foreground => "black", -background => "green");
$first_blue_button -> configure (-foreground => "black", -background => "gray");
$first_white_button -> configure (-foreground => "black", -background => "gray");
$first_off_button -> configure (-foreground => "black", -background => "gray");
sleep($delay);
}


sub First_Blue_button {

$first_color = '0000FF';
$first_red_button -> configure (-foreground => "black", -background => "gray");
$first_green_button -> configure (-foreground => "black", -background => "gray");
$first_blue_button -> configure (-foreground => "white", -background => "blue");
$first_white_button -> configure (-foreground => "black", -background => "gray");
$first_off_button -> configure (-foreground => "black", -background => "gray");
sleep($delay);
}


sub First_White_button {

$first_color = 'FFFFFF';
$first_red_button -> configure (-foreground => "black", -background => "gray");
$first_green_button -> configure (-foreground => "black", -background => "gray");
$first_blue_button -> configure (-foreground => "black", -background => "gray");
$first_white_button -> configure (-foreground => "black", -background => "white");
$first_off_button -> configure (-foreground => "black", -background => "gray");
sleep($delay);
}


sub First_Off_button {

$first_color = '000000';
$first_red_button -> configure (-foreground => "black", -background => "gray");
$first_green_button -> configure (-foreground => "black", -background => "gray");
$first_blue_button -> configure (-foreground => "black", -background => "gray");
$first_white_button -> configure (-foreground => "black", -background => "gray");
$first_off_button -> configure (-foreground => "white", -background => "black");
sleep($delay);
}


sub Second_Red_button {

$second_color = 'FF0000';
$second_red_button -> configure (-foreground => "white", -background => "red");
$second_green_button -> configure (-foreground => "black", -background => "gray");
$second_blue_button -> configure (-foreground => "black", -background => "gray");
$second_white_button -> configure (-foreground => "black", -background => "gray");
$second_off_button -> configure (-foreground => "black", -background => "gray");
sleep($delay);
}


sub Second_Green_button {

$second_color = '00FF00';
$second_red_button -> configure (-foreground => "black", -background => "gray");
$second_green_button -> configure (-foreground => "black", -background => "green");
$second_blue_button -> configure (-foreground => "black", -background => "gray");
$second_white_button -> configure (-foreground => "black", -background => "gray");
$second_off_button -> configure (-foreground => "black", -background => "gray");
sleep($delay);
}


sub Second_Blue_button {

$second_color = '0000FF';
$second_red_button -> configure (-foreground => "black", -background => "gray");
$second_green_button -> configure (-foreground => "black", -background => "gray");
$second_blue_button -> configure (-foreground => "white", -background => "blue");
$second_white_button -> configure (-foreground => "black", -background => "gray");
$second_off_button -> configure (-foreground => "black", -background => "gray");
sleep($delay);
}


sub Second_White_button {

$second_color = 'FFFFFF';
$second_red_button -> configure (-foreground => "black", -background => "gray");
$second_green_button -> configure (-foreground => "black", -background => "gray");
$second_blue_button -> configure (-foreground => "black", -background => "gray");
$second_white_button -> configure (-foreground => "black", -background => "white");
$second_off_button -> configure (-foreground => "black", -background => "gray");
sleep($delay);
}


sub Second_Off_button {

$second_color = '000000';
$second_red_button -> configure (-foreground => "black", -background => "gray");
$second_green_button -> configure (-foreground => "black", -background => "gray");
$second_blue_button -> configure (-foreground => "black", -background => "gray");
$second_white_button -> configure (-foreground => "black", -background => "gray");
$second_off_button -> configure (-foreground => "white", -background => "black");
sleep($delay);
}


sub Ctrl_fitstatUSB {

$period = 1000 - (1000*($speed/100));
$first_color_on = $period * ($first_color_percent/100);
$second_color_on = $period - $first_color_on;

my $blinkstring = "B"."#".$first_color."-".$first_color_on."#".$second_color."-".$second_color_on;

print "$blinkstring\n";

$port -> write("$blinkstring\n");
$port -> purge_rx;

}





Conclusions

1. The blinking capability of fit-statUSB can be very effective for bringing attention to critical situations.

2. fit-statUSB is a very versatile,cost-effective visual notification device.


Sun Aug 12, 2018 3:10 am
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 1 post ] 

Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by STSoftware for PTF.