### 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()