var running var p1 var p0 var state var interval var factor var product var speed var result var l[8] var counter var digit var code var i var steer interval = 5 factor = 15 product = 761 running = 0 sub sync when p0 < 512 do state = 1 counter = -interval / 2 digit = -1 code = 0 end sub read counter = counter + 1 if counter % interval == 0 then if digit < 3 then if p0 > 512 then code = code + (1 << digit) end digit = digit + 1 else state = 0 result = code end end sub display for i in 0:7 do if i == result then l[i] = 32 else l[i] = 0 end end call leds.circle(l[0],l[1],l[2],l[3],l[4],l[5],l[6],l[7]) sub calibrate if p0 < 512 then counter = counter + 1 result = counter % 8 else product = (product * (counter + -interval / 2)) / 40 running = 0 motor.left.target = 0 motor.right.target = 0 end sub drive steer = (factor * (p1 - 512)) / 50 motor.left.target = speed + steer motor.right.target = speed - steer onevent prox if running != 0 then p1 = prox.ground.delta[1] callsub drive p0 = prox.ground.delta[0] if state == 0 then callsub sync else if running == 1 then callsub read if state == 0 then callsub display end else callsub calibrate callsub display end end end onevent buttons when button.forward == 1 do running = 1 state = 0 speed = product / interval result = -1 callsub display end when button.center == 1 do running = 0 motor.left.target = 0 motor.right.target = 0 end when button.backward == 1 do speed = product / 5 running = -1 state = 0 result = -1 callsub display end if running == 0 then when button.left == 1 do if interval < 7 then interval = interval + 2 end end when button.right == 1 do if interval > 3 then interval = interval - 2 end end result = 2 - (interval - 3) / 2 callsub display end prox TRUE NEQ 0 running 0 0 p1 0 prox.ground.delta[1] p0 0 prox.ground.delta[0] TRUE EQ 0 state 0 0 TRUE EQ 0 running 0 1 TRUE EQ 0 state 0 interval 0 5 factor 0 15 product 0 761 running 0 0 buttons TRUE button.forward running 0 1 state 0 speed 0 / 1 product 1 interval result 0 -1 TRUE button.center running 0 0 TRUE button.backward speed 0 / 1 product 1 5 running 0 -1 state 0 result 0 -1 TRUE EQ 0 running 0 TRUE button.left TRUE LT 0 interval 0 7 interval 0 + 1 interval 1 2 TRUE button.right TRUE GT 0 interval 0 3 interval 0 - 1 interval 1 2 result 0 - 1 2 1 / 1 - 1 interval 1 3 1 2 l 8 sync TRUE LT 0 p0 0 512 state 0 1 counter 0 / 1 - interval 1 2 digit 0 -1 code 0 read counter 0 + 1 counter 1 TRUE EQ 0 % 1 counter 1 interval 0 TRUE LT 0 digit 0 3 TRUE GT 0 p0 0 512 code 0 + 1 code 1 << 1 1 digit digit 0 + 1 digit 1 state 0 0 result 0 code display i 0 7 TRUE EQ 0 i 0 result l 0 i 0 32 l 0 i 0 32 l 0 32 l 0 1 32 l 0 2 32 l 0 3 32 l 0 4 32 l 0 5 32 l 0 6 32 l 0 7 calibrate TRUE LT 0 p0 0 512 counter 0 + 1 counter 1 result 0 % 1 counter 1 8 product 0 / 1 * 1 product 1 + 1 counter 1 / 1 - interval 1 2 1 40 running 0 0 drive steer 0 / 1 * 1 factor 1 - 1 p1 1 512 1 50 motor.left.target 0 + 1 speed 1 steer motor.right.target 0 - 1 speed 1 steer