### define x1 = 1
x2 = 2
x3 = 3
newposition = 4
TargetPosition = 5
d = 6
difference = 7
precision = 8
selectprgm(slot_4)
beginoftask(main)
setvar(precision,con,20)
setsensortype(sensor_3,no_type)
setsensormode(sensor_3,raw_mode,0)
setpower(motor_a+motor_c,con,4)
setvar(targetPosition,con,140) {North-position}
{for this robot, 100 degrees mesured represent 90 real
degrees, E = 240, W=40}
starttask(2) {mesure angle}
starttask(1) {walk}
setfwd(motor_a+motor_c)<-----
on(motor_a+motor_c)
{----------------example------------------}
wait(con,1000) {wait 10 sec}
setvar(targetPosition,con,40) {go West}
wait(con,1000) {wait 10 sec}
setvar(targetposition,con,240) {go east}
wait(con,1000) {wait 10 sec}
setvar(targetposition,con,140) {go north again}
wait(con,1000) {wait 10 sec}
stoptask(1)
stoptask(2)
off(motor_a+motor_c)
endoftask()
beginoftask(1) {walk and adjust motor-power in function of
direction}
loop(con,forever)
while(var,TargetPosition,NE,var,newposition)
if(var,targetposition,GT,var,newposition) <-----
if(var,difference,LT,var,precision)
gosub(1) {go smoothly right}
else()
gosub(3) {go roughly right}
endif()
else()
if(var,difference,LT,var,precision)
gosub(2) {go smoothly left}
else()
gosub(4) {go roughly left}
endif()
endif()
endwhile()
setpower(motor_a+motor_c,con,4) {go straight on}
on(motor_a+motor_c)
endloop()
endoftask()
beginoftask(2)
loop(con,forever)
setvar(x1,senval,sensor_3) {x1:=input}
setvar(x2,con,27) {x2:=27}
mulvar(x2,var,x1) {x2:=x2*x1}
setvar(x3,con,1023) {x3:=1023}
subvar(x3,var,x1) {x3:=x3-x1}
divvar(x2,var,x3) {x2:=x2/x3}
mulvar(x2,con,2) {x2:=x2*2}
sumvar(x2,con,20) {x2:=x2+20, error correction}
setvar(newposition,var,x2) {angle in degres}
setvar(d,var,targetposition)
subvar(d,var,newposition)
absvar(d,var,d)
setvar(difference,var,d) {difference:=abs(targetpos-newPos)}
endloop()
endoftask()
beginofsub(1) {go smoothly right}
setpower(motor_c,con,1)<-----
setpower(motor_a,con,7)
endofsub()
beginofsub(2) {go smoothly left}
setpower(motor_c,con,7)<-----
setpower(motor_a,con,1)
endofsub()
beginofsub(3) {go roughly right}
setpower(motor_a,con,4)
off(motor_c)<-----
on(motor_a)
endofsub()
beginofsub(4) {go roughly left}
setpower(motor_c,con,4)
off(motor_a)<-----
on(motor_c)
endofsub()
#define RotationSensorValue = 9
addOrSub = 10
{-----------------------------------rotationsensor-reading---------}
setvar(addOrSub,con,1) {to be set to 1, if the robot advances, else -1}
setvar(RotationSensorValue,con,0) {reset the rotation sensor}
{.....}
beginoftask(3) loop(con,forever) while(senval,sensor_1,GT,con,0) endwhile() sumvar(RotationSensorValue,var,addorsub) while(senval,sensor_1,LT,con,5) endwhile() endloop() endoftask()
Adjust the tasks above:
beginofsub(1) {go smoothly right}
setrwd(motor_a+motor_c)
setpower(motor_a,con,0)
setpower(motor_c,con,7)
endofsub()
beginofsub(2) {go smoothly left}
setrwd(motor_a+motor_c)
setpower(motor_a,con,7)
setpower(motor_c,con,0)
endofsub()
beginofsub(3) {go roughly right}
setfwd(motor_a)
setrwd(motor_c)
setpower(motor_c+motor_a,con,7)
endofsub()
beginofsub(4) {go roughly left}
setfwd(motor_c)
setrwd(motor_a)
setpower(motor_a+motor_c,con,7)
endofsub()
to
change the direction, use the setvar() function and set the variable target_position.
{.....sensors.......}
#define(rotation_sensor,0)
{.....subroutines........}
#define(rough_right,1)
#define(rough_left,2)
#define(smooth_right,3)
#define(smooth_left,4)
#define(straight_on,5)
{.....tasks.......}
#define(direction_control,1)
#define(observe_sensor,2)
{.....variables......}
#define(target_position,1)
#define(real_position,2)
#define(difference,3)
#define(diff,4)
#define(abs_difference,5)
{......constants....}
#define(precision,10)
selectprgm(slot_1)
beginoftask(main)
setsensortype(rotation_sensor,4)
setsensormode(rotation_sensor,angle_mode,0)
clearsensorvalue(rotation_sensor)
starttask(observe_sensor)
gosub(straight_on)
starttask(direction_control)
endoftask()
{.........................................................................}
beginoftask(direction_control)
loop(con,forever)
while(var,difference,ne,con,0)
if(var,difference,GT,con,0)
if(var,abs_difference,GT,con,precision)
gosub(rough_right)
else()
gosub(smooth_right)
endif()
else()
if(var,abs_difference,GT,con,precision)
gosub(rough_left)
else()
gosub(smooth_left)
endif()
endif()
endwhile()
gosub(straight_on)
endloop()
endoftask()
{..........................................................................}
beginoftask(observe_sensor)
loop(con,forever)
setvar(real_position,senval,rotation_sensor)
setvar(diff,var,target_position)
subvar(diff,var,real_position)
setvar(difference,var,diff)
absvar(diff,var,diff)
setvar(abs_difference,var,diff)
endloop()
endoftask()
{..........................................................................}
beginofsub(straight_on)
setpower(motor_a+motor_c,con,7)
setfwd(motor_a+motor_c)
on(motor_a+motor_c)
endofsub()
beginofsub(rough_right)
setpower(motor_a+motor_c,con,4)
setfwd(motor_a)
setrwd(motor_c)
on(motor_a+motor_c)
endofsub()
beginofsub(rough_left)
setpower(motor_a+motor_c,con,4)
setfwd(motor_c)
setrwd(motor_a)
on(motor_a+motor_c)
endofsub()
beginofsub(smooth_right)
setfwd(motor_a+motor_c)
setpower(motor_a,con,7)
setpower(motor_c,con,1)
endofsub()
beginofsub(smooth_left)
setfwd(motor_a+motor_c)
setpower(motor_c,con,7)
setpower(motor_a,con,1)
endofsub()