chiark / gitweb /
more than two manual speeds
authorian <ian>
Fri, 6 Jan 2006 01:09:16 +0000 (01:09 +0000)
committerian <ian>
Fri, 6 Jan 2006 01:09:16 +0000 (01:09 +0000)
hostside/eventrun.events
hostside/stopgap-controller

index 9d6f07e2ab4a74182647e45972be3f11f1335234..6110ed1684f48d4e607cd1430a1dd38e41ee7dcf 100644 (file)
@@ -4,9 +4,9 @@ INIT    source /u/ian/things/Bessar/trains/eventrun.procs
 e3     trains_stop
 eb     trains_start
 
-b2     tw ask_slow
+b2     tw ask_speed -1
+ec     tw ask_speed +1
 e6     tw ask_randspeed
-ec     tw ask_fast
 
 ea     tw ask_manual 0
 e9     tw ask_manual 1
index 607609d0bd64ec5a117a560a007aea6c09a47a1e..b2c2276866aabc013b37147e62ebd4045c5e0341 100755 (executable)
@@ -29,6 +29,8 @@ set segs {xx yy}
 set segsasgot {xx yy}
 set pq {} ;# unset: cdu charged and waiting
 set speeddirn ff7f
+#unset askspeedix
+set askspeeds {10 30 50 80 100 126}
 #set speeddirn ffff80c3fbcced7f
 #set speeddirn_fixed {speed126 2 80 0}
 set speeddirn_fixed {}
@@ -481,16 +483,27 @@ proc setup_complete {} {
 #----------
 # for keyboard control
 
-proc ask_speed_now {l} {
-    global speeddirn_fixed
-    set speeddirn_fixed $l
+proc ask_speed {updown} {
+    global speeddirn_fixed askspeeds askspeedix
+    set ll [llength $askspeeds]
+    if {![info exists askspeedix]} {
+       set askspeedix [expr {
+           int($ll * 0.5 - 0.5 + 0.5 * $updown)
+       }]
+    } else {
+       incr askspeedix $updown
+       if {$askspeedix < 0} { set askspeedix 0 }
+       if {$askspeedix >= $ll} { set askspeedix [expr {$ll - 1}] }
+    }
+    set speed [lindex $askspeeds $askspeedix]
+    set speeddirn_fixed [list speed126 2 $speed 0]
     maybechange speeddirn 1
 }
 
-proc ask_fast {} { ask_speed_now {speed126 2 126 0} }
-proc ask_slow {} { ask_speed_now {speed126 2 10 0} }
 proc ask_randspeed {} {
-    global speeddirn_fixed; catch { unset speeddirn_fixed }
+    global speeddirn_fixed askspeedix
+    catch { unset speeddirn_fixed }
+    catch { unset askspeedix }
     maybechange speeddirn 1
 }