program frank { #include #include #include #include var vCoinCnt = 0 var vCoinRolling = 0 var vStepCnt = 0 var vRollTime = 0 var vValue = 0 var vHold = 0 sensor light1 on 1 light1 is light as percent event lBrite_light1EventHigh when light1.high sensor touch2 on 2 touch2 is switch as boolean event tRelease_touch2EventRelease when touch2.released sensor light3 on 3 light3 is light as percent event lBrite_light3EventHigh when light3.high event timer1_timer1Event when timer1 > 14 event range_messageEventRange when message is 1..2 main { ext InterfaceType "kFreestyle" rcx_ClearTimers bbs_GlobalReset([A B C]) start LightWatcher0 start TouchWatcher1 start LightWatcher2 start TimerWatcher3 start IRWatcher4 rcx_Priority( 8) trigger lBrite_light1EventHigh trigger tRelease_touch2EventRelease trigger lBrite_light3EventHigh trigger timer1_timer1Event rcx_ClearIRMessage trigger range_messageEventRange vHold = 0 vRollTime = 0 vCoinRolling = 0 vCoinCnt = 0 vStepCnt = 0 vValue = 0 direction [ ] [ C ] rcx_Calibrate(3,1) calibrate (Light1) rcx_Calibrate(3,4) calibrate (Light3) on [ A ] display vValue:2 forever { } } watcher LightWatcher0 monitor lBrite_light1EventHigh { rcx_Priority( 4 ) off [ A ] clear Timer1 vCoinRolling = 10 vCoinCnt += 10 vStepCnt = 0 } restart on event watcher TouchWatcher1 monitor tRelease_touch2EventRelease { rcx_Priority( 3 ) if vCoinRolling = 10{ vStepCnt += 10 } else { off [ C ] on [ A ] } } restart on event watcher LightWatcher2 monitor lBrite_light3EventHigh { rcx_Priority( 4 ) if vCoinRolling = 0{ } else { vRollTime = Timer1 if vRollTime > 74{ vValue += 200 } else { if vRollTime > 66{ vValue += 50 } else { if vRollTime > 58{ vValue += 100 } else { if vRollTime > 49{ vValue += 20 } else { if vRollTime > 42{ vValue += 5 } else { if vRollTime > 33{ vValue += 10 } else { if vRollTime > 25{ vValue += 2 } else { vValue += 1 } } } } } } } vCoinRolling = 0 } } restart on event watcher TimerWatcher3 monitor timer1_timer1Event { rcx_Priority( 8) if vCoinRolling = 10{ on [ C ] } else { on [ A ] } } restart on event watcher IRWatcher4 monitor range_messageEventRange { rcx_Priority( 6 ) if message = 1{ if vHold = 10{ sound 5 } else { global off [ A C ] vCoinRolling = 0 vStepCnt = 0 sound 3 vHold = 10 } } else { if vHold = 10{ off [ A ] global on [ A C ] on [ C ] sound 4 vHold = 0 } else { sound 5 } } clear message } restart on event }