fl { Light_sensor PropForth 5.5 P0 ─ 220ohm──── LED ───── P1 ledp ledn 2013/10/03 17:05:52 } \ a cog special register [ifndef ctra h1F8 wconstant ctra ] [ifndef frqa h1FA wconstant frqa ] [ifndef phsa h1FC wconstant phsa ] \ ******************* \ Constants \ ******************* 0 constant ledp 1 constant ledn 1 ledp lshift constant ledpm 1 ledn lshift constant lednm lednm ledpm or constant ledm \ ******************* \ main \ ******************* \ Read \ ( -- n1) : readLED \ Reverse bias for LED outa COG@ ledpm andn lednm or outa COG! \ Set outa for ledp=0 ledn=1 dira COG@ ledm or dira COG! \ Set ledn and ledp to output cnt COG@ cnt COG@ drop drop \ Wait 5usec 0 phsa COG! dira COG@ lednm andn dira COG! \ Set ledn to input \ Wait until ledn become to Lo begin ina COG@ lednm and \ Get ledn phsa COG@ d1400000 > \ Time out 17.5msec if drop 1 else 0= then until phsa COG@ ; : test h20000000 ledn or ctra COG! 1 frqa COG! clkfreq d50 u/ cnt COG@ + \ loop time 20msec begin readLED . cr \ outa COG@ lednm andn outa COG! \ dira COG@ lednm or dira COG! clkfreq d50 u/ waitcnt fkey? swap drop until drop ; \ Light_sense demo \ ( -- ) : demo1 h20000000 ledn or ctra COG! \ Set mode to "POS detector" 1 frqa COG! clkfreq d50 u/ cnt COG@ + \ loop time 20msec begin readLED dup . \ On LED if d600000 d600000 > if ." LED on" cr outa COG@ lednm andn ledpm or outa COG! \ Set outa for ledp=1 ledn=0 dira COG@ ledm or dira COG! \ Set ledn and ledp to output then clkfreq d50 u/ waitcnt \ outa COG@ ledpm andn outa COG! fkey? swap drop until drop ;