REBOL [ ]

;do http://proton.cl-ki.uni-osnabrueck.de/REBOL/lego.r
do http://www.rebolforces.com/fx5/REBOL/lego.r

; insert clear system/ports/serial [cua1]

example1: [ task 0 [
   motor both backward speed 0 on
   wait 20
   forever [
	name
		#left sensor 0
		#speed-left motor tacho speed 0
		#right sensor 2
		#speed-right motor tacho speed 2
		#test var 0

	motor both backward speed 0

	set #test #left
	if #speed-left <= 5 [
		set #test 1
	]
	if #test = 1 [
		play sound 3
		motor both forward
		wait 50
		motor both speed 2 left backward
		wait 20
	]

	set #test #right
	if #speed-right <= 5 [
		set #test 1
	]
	if #test = 1 [
		play sound 2
		motor both forward
		wait 50
		motor both speed 2 right backward
		wait 20
	]
   ]
]]

example2: [task 0 [
   motor both speed 0 backward on
   name
	#left var 0
	#right var 1
	#left-mem var 2
	#right-mem var 3
	#left-akt var 4
	#right-akt var 5
	#tmp var 6
   set #left 0
   set #right 0
   set #left-mem motor tacho 0
   set #right-mem motor tacho 1
   forever [
	set #left-akt motor tacho 0
	set #right-akt motor tacho 1

	set #left + #left-akt - #left-mem
	set #right + #right-akt - #right-mem

	set #tmp 0
	if #left <= -1 [set #tmp 1]
	if #right <= -1 [set #tmp 1]

	if #tmp = 0 [

		set #tmp #left - #right
		if #tmp <= -1 [
			motor right float left on
			play tone 800 1
		]
		if #tmp >= 1 [
			motor left float right on
			play tone 400 1
		]

		if #tmp = 0 [
			motor both on
		]
	]

	set #left-mem #left-akt
	set #right-mem #right-akt

	if #right >= 350 [
		set #left - 350
		set #right - 351
	]
   ]
]]

example3: [
 task all delete
task 0 [
   motor both backward speed 0 on
   wait 20
   name
	#left-sens sensor 0
	#speed-left motor tacho speed 0
	#right-sens sensor 2
	#speed-right motor tacho speed 2
	#test var 7
	#left var 0
	#right var 1
	#left-mem var 2
	#right-mem var 3
	#left-akt var 4
	#right-akt var 5
	#tmp var 6
   forever [
	motor both backward speed 0

	set #test #left-sens
	if #speed-left <= 5 [
		set #test 1
	]
	if #test = 1 [
		play sound 3
		motor both forward on
		wait 50
		motor both speed 2 left backward
		wait 30
		set #left 0
		set #right 0
		set #left-mem motor tacho 0
		set #right-mem motor tacho 1
	]

	set #test #right-sens
	if #speed-right <= 5 [
		set #test 1
	]
	if #test = 1 [
		play sound 2
		motor both forward on
		wait 50
		motor both speed 2 right backward
		wait 30
		set #left 0
		set #right 0
		set #left-mem motor tacho 0
		set #right-mem motor tacho 1
	]




	set #left-akt motor tacho 0
	set #right-akt motor tacho 1

	set #left + #left-akt - #left-mem
	set #right + #right-akt - #right-mem

	set #tmp 0
	if #left <= -1 [set #tmp 1]
	if #right <= -1 [set #tmp 1]

	if #tmp = 0 [

		set #tmp #left - #right
		if #tmp <= -1 [
			motor right float left on
			play tone 800 1
		]
		if #tmp >= 1 [
			motor left float right on
			play tone 400 1
		]

		if #tmp = 0 [
			motor both on
		]
	]

	set #left-mem #left-akt
	set #right-mem #right-akt

	if #right >= 350 [
		set #left - 350
		set #right - 351
	]
   ]
]]

port: open/direct lego://port2

insert port [init]
wait 2  ; Give the CM time for init

insert port example3
