var p1 var steer var ireg var preg var status var product var interval var digit var digival var code var wordlen var valeur var system var speed var p0 var state var counter var white var black var diff var color var grey var result #onevent startup interval = 5 system = 4 wordlen = 2 grey=512 call sd.open(1000,status) if status == 0 then call sd.read(product,status) call sd.open(-1,status) else product=733 # a guess for product end speed=product/interval sub use_result # put your action here emit spy result sub follow_the_track p1 = prox.ground.delta[1] preg = (p1 - grey) / 4 ireg += preg / 3 steer = preg + ireg motor.left.target = speed + steer motor.right.target = speed - steer onevent prox callsub follow_the_track p0 = prox.ground.delta[0] if state == S_WAIT_SYNC then if p0 < grey then state = S_READING counter = -interval / 2 digit = BLACK digival = 1 code = 0 end else counter++ if counter % interval == 0 then if digit == BLACK then black = p0 elseif digit == WHITE then white = p0 diff = white - black grey= (white + black) / 2 elseif digit < wordlen then valeur = ((system -1) * (p0 - black) + diff / 2) / diff code += valeur * digival digival *= system else state = S_WAIT_SYNC result = code callsub use_result end digit++ end end