#!/usr/bin/wish set DEVICE "/dev/ttyUSB0" set SRLFILE [open $DEVICE r+] fconfigure $SRLFILE -blocking 0 -translation binary -encoding binary -buffering none -mode 57600,n,8,1 set idle 0 set waiting 1 set state $idle set buttoncode 256 for {set i 1} {$i <=8} {incr i} { set button($buttoncode) $i set buttoncode [expr $buttoncode*2] } proc readbuffer {} { global SRLFILE button set key 0 set message [read $SRLFILE] binary scan $message s key set key [expr $key & 0xFFFF] if {[catch {set key $button($key)}] == 0} { return $key } return 0 } puts $SRLFILE s after 200 readbuffer puts $SRLFILE r after 200 readbuffer button .start -text "Start" -command start pack .start label .pressed pack .pressed proc start {} { global SRLFILE state idle waiting readbuffer .start configure -state disabled -command {} set state $waiting } proc body {} { global state idle waiting update idletasks if { $state == $waiting } { set pressed [readbuffer] if { $pressed != 0 } { set state $idle .start configure -state active -command start .pressed configure -text "Pressed $pressed" puts $pressed readbuffer } } else { readbuffer } after 10 body } body