Project:Arduino Rotary Encoder Menu System: Difference between revisions
No edit summary |
No edit summary |
||
Line 142: | Line 142: | ||
my ($scr_w, $scr_h) = $mw->maxsize(); | my ($scr_w, $scr_h) = $mw->maxsize(); | ||
t "maxsize says: $scr_w x $scr_h"; | t "maxsize says: $scr_w x $scr_h"; | ||
$mw->geometry("656x512+0+0"); | #~ $mw->geometry("656x512+0+0"); | ||
$mw->geometry("680x540+0+0"); | |||
#~ $mw->FullScreen; | |||
#~ $mw->geometry(($mw->maxsize())[0] .'x'.($mw->maxsize())[1] . "+0+0"); | #~ $mw->geometry(($mw->maxsize())[0] .'x'.($mw->maxsize())[1] . "+0+0"); | ||
my $c = $mw->Canvas(-bg => " | my $c = $mw->Canvas(-bg => "yellow", -width => 680, -height => 540)->pack; | ||
# in theory we should be able to scroll infinitely but let's stick to something reasonable | # in theory we should be able to scroll infinitely but let's stick to something reasonable | ||
#$c->configure(-scrollregion => [0,0, 600, 400]); | #$c->configure(-scrollregion => [0,0, 600, 400]); | ||
Line 153: | Line 154: | ||
my $menu_h = 100; | my $menu_h = 100; | ||
# it don't work! | |||
#~ invisible_cursor(); | |||
# warp pointer tests... | |||
$mw->after(100, sub {warp(20,20)}); | |||
sub warp { | |||
my($x, $y) = @_; | |||
t "warp pointer to $x $y"; | |||
$c->focus; | |||
$mw->eventGenerate("<Motion>", | |||
-when => 'head', | |||
-x => $x, -y => $y, -warp => 1 | |||
); | |||
} | |||
# keybinding tests... | |||
$mw->bind('<KeyPress>' => \&print_keysym); | |||
sub print_keysym { | |||
my($widget) = @_; | |||
my $e = $widget->XEvent; # get event object | |||
my($keysym_text, $keysym_decimal) = ($e->K, $e->N); | |||
print "keysym=$keysym_text, numeric=$keysym_decimal\n"; | |||
} | |||
# hide cursor | |||
sub invisible_cursor { | |||
my $bitmapfile = Tk->findINC('trans_cur.xbm'); | |||
my $maskfile = Tk->findINC('trans_cur.mask'); | |||
$mw->configure(-cursor => [ '@' . $bitmapfile, $maskfile, 'black', 'white' ] ); | |||
} | |||
# handy font chooser | # handy font chooser | ||
#~ $mw->Button( | #~ $mw->Button( | ||
#~ -font => $font, | |||
#~ -text => "Font", | |||
#~ -command => sub{choose_font()}, | |||
#~ )->pack(); | #~ )->pack(); | ||
Line 193: | Line 226: | ||
sub menubox { | sub menubox { | ||
my($t, $mx, $my) = @_; | |||
my $x1 = $mx * $menu_w; | |||
my $y1 = $my * $menu_h; | |||
my $x2 = $x1 + $menu_w; | |||
my $y2 = $y1 + $menu_h; | |||
$c->createRectangle($x1, $y1, $x2, $y2, | |||
-fill => "blue", | |||
-activefill => "green", | |||
-outline => "green", | |||
-activeoutline => "orange", | |||
); | |||
$c->createText($x1 + ($menu_w/2), $y1+ ($menu_h/2), | |||
-text => "$t", | |||
-font => $font, | |||
-fill => "black", | |||
); | |||
} | } | ||
Revision as of 00:31, 30 July 2012
I have recovered a number of ALPS rotary encoders from discarded industrial CRT monitors. I'm working on building a user interface menu system that makes use of the rotary encoders as the sole input technique.
multiple encoders
Try out http://code.google.com/p/adaencoder/ and PinChangeInt library (http://code.google.com/p/arduino-pinchangeint/) see...
http://arduino.cc/playground/Main/RotaryEncoders#Example14
See if it can cope with two encoders at rapid rate usage.
OK, working well --Michael Erskine 18:10, 29 July 2012 (EST)
When using the Raspberry Pi as the menu display system we need to do a few things to a stock raspbian install...
- auto login and start X: use option in raspi-config
- switch off screen blanking: /etc/lightdm/lightdm.conf in SeatDefaults section "xserver-command=X -s 0 -dpms"
- auto start application
Here I'm building a Perl Tk menu application prototype using Tk::Canvas. I haven't yet wired up the serial as I'm just trying out some graphic styles on the small PAL LCD screen.
moving the cursor with Perl Tk