ホストでの表示部分はTcl/Tkで書きました。Tcl/Tkなんて10年振りだ。昔はデ
ザイナさん向けのちょこっとしたツールを作るのによく使っていた。Tclはシェ
ルスクリプトなので変数の展開のタイミングを考えながら書かないといけない
のが、慣れるまでモヤモヤするんだよね。
シリアルの通信をどうしようか悩んでいたのだけれど、最近のTclはシリアル が使えるようになってたので、おあつらえむき。
で、できたのがこれ。ゼロリセットはスクリプト側で処理しています。いずれ ノギスのパワーON/OFFなどの制御も入れたいな...と、口だけつけてあります。 (Tclモードのうちに書いておかないとまた面倒だし^^)

シリアルの通信をどうしようか悩んでいたのだけれど、最近のTclはシリアル が使えるようになってたので、おあつらえむき。
で、できたのがこれ。ゼロリセットはスクリプト側で処理しています。いずれ ノギスのパワーON/OFFなどの制御も入れたいな...と、口だけつけてあります。 (Tclモードのうちに書いておかないとまた面倒だし^^)

#!/usr/pkg/bin/wish
set row 0
foreach i { X Y Z } {
set dro_offset($i) 0.
set dro_value($i) 0.
set dro_power($i) 0
checkbutton .c$i -text $i: -variable dro_power($i) -command "dro_power $i" \
-font {{bandal} 50 bold}
.c$i configure -anchor e
button .b$i -height 1 -width 7 -pady 0 -font {{bandal} 50 bold} \
-command "dro_zero $i"
grid configure .c$i -column 0 -row $row
grid configure .b$i -column 1 -row $row
incr row
}
button .e -text "Quit" -command {
set a [tk_messageBox -type yesno -default no -icon question -message "Quit?"]
if { $a == "yes" } { exit }
}
grid configure .e -row 3
proc dro_power { axis } {
global dro_power
# not yet.
puts stdout $axis
puts stdout $dro_power($axis)
}
proc dro_zero { axis } {
global dro_offset
global dro_value
set dro_offset($axis) $dro_value($axis)
}
proc dro_update { axis val } {
global dro_offset
set v [expr $val - $dro_offset($axis)]
set t [format "%5.2f" $v]
.b$axis configure -text $t -anchor e
}
proc dro_main { } {
global dro_value
set device "/dev/dty00"
set fd [open $device {RDWR}]
fconfigure $fd -mode 57600,n,8,1
while { 1 } {
gets $fd buf
scan $buf "%d %d %d" X Y Z
foreach i { X Y Z } {
set dro_value($i) [expr ($$i - ($$i / 100)/1.27)/100.0]
dro_update $i $dro_value($i)
# Redraw all.
update
}
}
}
dro_main
本当、ちょこっとしたことにはTcl/Tkパワフルだよね〜。
