program test { #include #include #include #include var vPolseMax = 0 var vPolseMin = 0 var vHightMax = 0 var vHightMin = 0 var vSwingMax = 0 var vSwingMin = 0 var vSwingLeft = 0 var vSwing = 0 var vPolseSet = 0 var vHightSet = 0 var vSwingSet = 0 var vReady = 0 var vPolseS2 = 0 var vHightS2 = 0 var vSwingS2 = 0 var vAirOK = 0 var vHandClosed = 0 var vRunCoordinates = 0 var vGoLeft = 0 sensor touch2 on 2 touch2 is switch as boolean event tPress_touch2EventPress when touch2.pressed event equal_messageEventEqual when message = 9 event equal_messageEventEqual0 when message = 10 event equal_messageEventEqual1 when message = 11 event equal_vRunCoordinatesEventEqual when vRunCoordinates = 10 event equal_vRunCoordinatesEventEqual0 when vRunCoordinates = 20 sensor rotation1 on 1 rotation1 is rotation as angle sensor rotation3 on 3 rotation3 is rotation as angle event equal_vRunCoordinatesEventEqual1 when vRunCoordinates = 30 event equal_vAirOKEventEqual when vAirOK = 10 event equal_messageEventEqual2 when message = 3 macro MOTORCONTROL { vPolseS2 = vPolseSet vPolseS2 += 100 vHightS2 = vHightSet vHightS2 += 250 vReady = 0 while vReady = 0 { vReady = 10 if rotation1 is (vHightSet / 10)..(vHightS2 / 10){ float [ A ] } else { vReady = 0 if rotation1 > (vHightSet / 10){ direction [ ] [ A ] } else { direction [ A ] [ ] } on [ A ] } if vSwing = vSwingSet{ float [ B ] } else { vReady = 0 if vSwing > vSwingSet{ vSwingLeft = 0 direction [ B ] [ ] } else { vSwingLeft = 10 direction [ ] [ B ] } on [ B ] } if rotation3 is (vPolseSet / 10)..(vPolseS2 / 10){ float [ C ] } else { vReady = 0 if rotation3 > (vPolseSet / 10){ direction [ ] [ C ] } else { direction [ C ] [ ] } on [ C ] } } } main { ext InterfaceType "kFreestyle" rcx_ClearTimers bbs_GlobalReset([A B C]) trigger equal_vAirOKEventEqual trigger equal_messageEventEqual start TouchWatcher0 start IRWatcher1 start IRWatcher2 start IRWatcher3 start variableWatcher4 start variableWatcher5 rcx_Priority( 8) trigger tPress_touch2EventPress rcx_ClearIRMessage rcx_ClearIRMessage trigger equal_messageEventEqual0 rcx_ClearIRMessage trigger equal_messageEventEqual1 trigger equal_vRunCoordinatesEventEqual trigger equal_vRunCoordinatesEventEqual1 vRunCoordinates = 0 vAirOK = 0 vHandClosed = 0 direction [ A B C ] [ ] vPolseMax = 17700 vPolseMin = -6900 vHightMax = 0 vHightMin = 17400 vSwingMax = 170 vSwingMin = -170 vSwingLeft = 10 vSwing = 0 rcx_Calibrate(4,5) clear Rotation1 clear Rotation3 display rotation1 wait until equal_vAirOKEventEqual vGoLeft = -10 repeat { vPolseSet = -1000 vHightSet = 15000 vSwingSet = 0 send 4 vRunCoordinates = 10 while vRunCoordinates = 10 { } if vAirOK = 10{ } else { wait until equal_vAirOKEventEqual } send 6 wait until equal_messageEventEqual clear message vPolseSet = 5000 vHightSet = 5000 if vGoLeft = 10{ vSwingSet = 80 } else { vSwingSet = -80 } rcx_Multiply( vGoLeft,-10) vRunCoordinates = 10 while vRunCoordinates = 10 { } send 8 wait 200 send 4 } until equal_messageEventEqual2 vRunCoordinates = 20 wait 100 send 3 vPolseSet = 0 vHightSet = vHightMax vSwingSet = 0 vRunCoordinates = 30 while vRunCoordinates = 30 { } sound 1 stop tasks } watcher TouchWatcher0 monitor tPress_touch2EventPress { rcx_Priority( 3 ) if vSwingLeft = 10{ vSwing += 10 } else { vSwing -= 10 } } restart on event watcher IRWatcher1 monitor equal_messageEventEqual { rcx_Priority( 6 ) clear message vHandClosed = 10 } restart on event watcher IRWatcher2 monitor equal_messageEventEqual0 { rcx_Priority( 6 ) clear message vAirOK = 10 } restart on event watcher IRWatcher3 monitor equal_messageEventEqual1 { rcx_Priority( 6 ) clear message vAirOK = 0 } restart on event watcher variableWatcher4 monitor equal_vRunCoordinatesEventEqual { rcx_Priority( 2 ) repeat { MOTORCONTROL vRunCoordinates = 20 } until equal_vRunCoordinatesEventEqual0 vRunCoordinates = 0 } restart on event watcher variableWatcher5 monitor equal_vRunCoordinatesEventEqual1 { rcx_Priority( 2 ) MOTORCONTROL vRunCoordinates = 0 } restart on event }