program test { #include #include #include #include var vIR_Msg = 0 var vMoving = 0 var vBumped = 0 var vPunching = 0 sensor rotation1 on 1 rotation1 is rotation as angle event less_rotation1EventLow when rotation1 < -3 event greater_rotation1EventHigh when rotation1 > 3 sensor touch2 on 2 touch2 is switch as boolean event tRelease_touch2EventRelease when touch2.released sensor touch3 on 3 touch3 is switch as boolean event tPress_touch3EventPress when touch3.pressed event tRelease_touch3EventRelease when touch3.released event equal_messageEventEqual when message = 1 event equal_messageEventEqual0 when message = 2 event equal_messageEventEqual1 when message = 3 event timer1_timer1Event when timer1 > 10 event timer2_timer2Event when timer2 > 30 macro BB_SETMOT { if vMoving = 0{ float [ A C ] } else { if vMoving > 0{ direction [ A C ] [ ] } else { direction [ ] [ A C ] } on [ A C ] } } main { ext InterfaceType "kFreestyle" rcx_ClearTimers bbs_GlobalReset([A B C]) trigger tRelease_touch2EventRelease start RotationWatcher0 start RotationWatcher1 start TouchWatcher2 start TouchWatcher3 start IRWatcher4 start IRWatcher5 start IRWatcher6 start TimerWatcher7 start TimerWatcher8 rcx_Priority( 8) trigger less_rotation1EventLow trigger greater_rotation1EventHigh trigger tPress_touch3EventPress trigger tRelease_touch3EventRelease rcx_ClearIRMessage trigger equal_messageEventEqual rcx_ClearIRMessage trigger equal_messageEventEqual0 rcx_ClearIRMessage trigger equal_messageEventEqual1 trigger timer1_timer1Event trigger timer2_timer2Event vPunching = 0 vIR_Msg = 0 vMoving = 0 vBumped = 0 rcx_Calibrate(4,1) clear Rotation1 display rotation1 global dir [ ] [ A C ] float [ A C ] forever { if touch2 is closed { wait 150 if touch2 is closed { direction [ ] [ B ] on [ B ] wait until tRelease_touch2EventRelease on [ B ] for 230 direction [ B ] [ ] } else { } } else { } } stop tasks } watcher RotationWatcher0 monitor less_rotation1EventLow { rcx_Priority( 5 ) if vMoving = 10{ vBumped = 10 direction [ ] [ A C ] on [ A C ] wait 50 vMoving = 0 vBumped = 0 } else { direction [ ] [ A C ] on [ A C ] wait 20 off [ A ] wait 20 float [ A C ] } BB_SETMOT } restart on event watcher RotationWatcher1 monitor greater_rotation1EventHigh { rcx_Priority( 5 ) if vMoving = 10{ vBumped = 10 direction [ ] [ A C ] on [ A C ] wait 50 vMoving = 0 vBumped = 0 BB_SETMOT } else { vIR_Msg = 0 direction [ ] [ B ] on [ B ] clear Timer2 vPunching = 10 wait until tRelease_touch2EventRelease vPunching = 0 on [ B ] for 230 } } restart on event watcher TouchWatcher2 monitor tPress_touch3EventPress { rcx_Priority( 3 ) tone 800 for 50 tone 600 for 50 tone 400 for 50 vMoving = 0 BB_SETMOT global off [ A B C ] } restart on event watcher TouchWatcher3 monitor tRelease_touch3EventRelease { rcx_Priority( 3 ) sound 4 global on [ A B C ] } restart on event watcher IRWatcher4 monitor equal_messageEventEqual { rcx_Priority( 6 ) if vIR_Msg = 20{ vIR_Msg = 0 direction [ B ] [ ] on [ B ] wait until tRelease_touch2EventRelease float [ B ] } else { power [ A C ] 3 direction [ C ] [ A ] on [ A C ] wait until equal_messageEventEqual0 power [ A C ] 8 BB_SETMOT } clear message } restart on event watcher IRWatcher5 monitor equal_messageEventEqual0 { rcx_Priority( 6 ) if vIR_Msg = 20{ vIR_Msg = 0 vMoving = 10 } else { sound 1 vIR_Msg = 20 vMoving = 0 clear Timer1 } BB_SETMOT clear message } restart on event watcher IRWatcher6 monitor equal_messageEventEqual1 { rcx_Priority( 6 ) if vIR_Msg = 20{ vIR_Msg = 0 direction [ ] [ B ] on [ B ] clear Timer2 vPunching = 10 wait until tRelease_touch2EventRelease vPunching = 0 on [ B ] for 230 } else { power [ A C ] 3 direction [ A ] [ C ] on [ A C ] wait until equal_messageEventEqual0 power [ A C ] 8 BB_SETMOT } clear message } restart on event watcher TimerWatcher7 monitor timer1_timer1Event { rcx_Priority( 8) comment (0, 0 ) "Vergeet dat IRmsg 2 is\ringedrukt zodat je een\rbocht kan nemen als je\rstilstaat" vIR_Msg = 0 } restart on event watcher TimerWatcher8 monitor timer2_timer2Event { rcx_Priority( 8) if vPunching = 10{ comment (0, 0 ) "TimeOut when Puncher\rdoes not hit TouchSensor\rbecause it is stucked in\rtarget object" direction [ ] [ A C ] on [ A C ] wait 100 BB_SETMOT } else { } } restart on event }