fl { PropForth5.5(DevKernel) 2020/12/25 21:49:04 RoverController IR 3V3 3V3 | | | 10kohm IR-LED 10kohm |------NP--220ohm---3V3 | D IR-diode P3 ---NP----|-----G N-ch FET diode | S 2N7000 P4 ---NP---- | diode GND } \ =========================================================================== \ Constants \ =========================================================================== 3 wconstant 38kHzpin 4 wconstant signal d400000 constant 10T \ 5msec d200000 constant 5T \ 2.5msec d40000 constant 1T \ 500usec d120000 constant 3T \ 1.5msec d8000000 constant 100msec \ =========================================================================== \ Main \ =========================================================================== \ Generate 32kHz-pulse \ ( -- ) : 38kHz h10000000 38kHzpin or ctra COG! \ NCO mode d2040109 frqa COG! 38kHzpin pinout \ Set 38kHzpin to output ; \ Transmit bit-array \ ( n1 -- ) n1:data : byteTransmit h80 8 0 do 2dup and if \ bit'1' 3T cnt COG@ + signal pinhi 3T waitcnt drop 1T cnt COG@ + signal pinlo 1T waitcnt drop else \ bit'0' 1T cnt COG@ + signal pinhi 1T waitcnt drop 1T cnt COG@ + signal pinlo 1T waitcnt drop then 1 rshift loop 2drop ; : RoverControler1 ; \ Tranmit values of VRs by IR \ ( -- ) : IR_Emit signal pinout bitArray d12 0 fill c" XYdir" 0 cogx c" rotate_dir" 1 cogx d100 delms 38kHz 100msec cnt COG@ + begin \ Check if no data bitArray dup L@ over 4+ L@ + over 8 + L@ + if \ Frame 10T cnt COG@ + signal pinhi 10T waitcnt drop 5T cnt COG@ + signal pinlo 5T waitcnt drop \ First byte dup L@ byteTransmit \ Second byte 4+ dup L@ byteTransmit \ Third byte 4+ L@ byteTransmit \ separation 1T cnt COG@ + signal pinhi 1T waitcnt drop 1T cnt COG@ + signal pinlo 1T waitcnt drop else drop then 100msec waitcnt 0 until \ fkey? swap drop until ; \ Boot after Power-on : onreset5 onreset IR_Emit ;