' -----[ Program Title and Description ]----------------------------------- ' dvr_side.bs2 ' Decode pelco codes. Get 7 bytes at a time from DVR. Send one byte out by radio. ' Author: "Speaker", IMT Industries, as usual - borrowing heavily from Parallax ' {$STAMP BS2} ' {$PBASIC 2.5} ' -----[ Select Stamp ]--------------------------------------- #SELECT $STAMP #CASE BS2, BS2E, BS2PE T9600 CON 84 #CASE BS2SX, BS2P T9600 CON 240 #CASE BS2PX T9600 CON 396 #ENDSELECT ' -----[ Variables ]------------------------------------------------------- Baud CON T9600 Rx CON 15 ' XBee DOUT Tx CON 14 ' XBee DIN RTS CON 11 ' XBee RTS My_Addr CON $1 ' Set address of node, modify as desired, - ' - $1-$FFFE serStr1 VAR Byte(7) ' Press an arrow serStr2 VAR Byte(7) ' Release an arrow serStrP VAR Byte(7) ' Click a preset code VAR Byte cntr VAR Byte DL_Addr VAR Word ' Destination address for data DL_Addr = 4 ' -----[ Configure XBee to use RTS and set Address ]--------------------- PAUSE 500 DEBUG CLS,"Configuring XBee...",CR PAUSE 3000 ' Guard time SEROUT Tx,Baud,["+++"] ' Command Mode Sequence PAUSE 2000 ' Guard time SEROUT TX,Baud,["ATDL ", HEX DL_Addr,CR] ' Set Destination Node Address SEROUT Tx,Baud,["ATMY ", HEX My_Addr,CR] ' Set node address SEROUT TX,Baud,["ATCN",CR] ' Exit Command Mode DEBUG "Awaiting data..." ' -----[ Initialization ]-------------------------------------------------- FOR cntr = 0 TO 6 serStr1 (cntr) = 0 serStr2 (cntr) = 0 serStrP (cntr) = 0 NEXT code = 0 SEROUT tx, Baud, ["!",CR,CR] ' need a serout here to assure SEROUT tx, Baud, [DEC code,CR,CR] ' that the cart is standing still. DEBUG ? code ' -----[ Main Routine ]---------------------------------------------------- DO IF serStrP(3) <> 07 THEN ' ignores all till preset entered SERIN 9,396,[STR serStrP\7] ' 7 bytes 'DEBUG HEX2 serStrP(0), " ", HEX2 serStrP(1), " ", HEX2 serStrP(2), " ", ' HEX2 serStrP(3), " ", HEX2 serStrP(4), " ", HEX2 serStrP(5), " ", ' HEX2 serStrP(6), " ", CR ELSEIF serStrP(0) = 255 AND serStrP(3) = 07 AND serStrP(5) = 01 THEN ' camera enable DEBUG "inside camera enable",CR code = 32 ' (001)00000 GOSUB scan_inputs ELSEIF serStrP(0) = 255 AND serStrP(3) = 07 AND serStrP(5) = 02 THEN ' forward DEBUG "inside forward",CR code = 64 ' (010)00000 GOSUB scan_inputs ELSEIF serStrP(0) = 255 AND serStrP(3) = 07 AND serStrP(5) = 03 THEN ' reverse DEBUG "inside reverse",CR code = 96 ' (011)00000 GOSUB scan_inputs ELSEIF serStrP(0) = 255 AND serStrP(3) = 07 AND serStrP(5) = 04 THEN ' camera control DEBUG "inside camera control",CR code = 128 ' (100)00000 GOSUB scan_inputs ELSE ' ignore all other presets serStrP(3) = 0 ENDIF LOOP ' -----[ Subroutine - scan_inputs ]------------------------------------------- scan_inputs: DEBUG "inside scan inputs",CR SERIN 9,396,[STR serStr1\7] ' 7 Bytes DEBUG CR 'DEBUG HEX2 serStr1(0), " ", HEX2 serStr1(1), " ", HEX2 serStr1(2), " ", ' HEX2 serStr1(3), " ", HEX2 serStr1(4), " ", HEX2 serStr1(5), " ", ' HEX2 serStr1(6), " ", CR IF serStr1(3) = 2 THEN ' Right arrow pressed DEBUG "right arrow", CR code = code + 1 ' code = code + 00000(001) DEBUG ? code SEROUT tx, Baud, ["!",CR,CR] SEROUT tx, Baud, [DEC code,CR,CR] SERIN 9,396,[STR serStr2\1] ' Wait for arrow release DEBUG CR DEBUG HEX2 serStr2(0), " ", HEX2 serStr2(1), " ", HEX2 serStr2(2), " ", HEX2 serStr2(3), " ", HEX2 serStr2(4), " ", HEX2 serStr2(5), " ", HEX2 serStr2(6), " ", CR code = code - 1 ' code = code - 00000(001) DEBUG ? code SEROUT tx, Baud, ["!",CR,CR] SEROUT tx, Baud, [DEC code,CR,CR] ELSEIF serStr1(3) = 4 THEN ' Left arrow pressed DEBUG "left arrow", CR code = code + 2 ' code = code + 00000(010) DEBUG ? code SEROUT tx, Baud, ["!",CR,CR] SEROUT tx, Baud, [DEC code,CR,CR] SERIN 9,396,[STR serStr2\1] ' Wait for arrow release DEBUG CR DEBUG HEX2 serStr2(0), " ", HEX2 serStr2(1), " ", HEX2 serStr2(2), " ", HEX2 serStr2(3), " ", HEX2 serStr2(4), " ", HEX2 serStr2(5), " ", HEX2 serStr2(6), " ", CR code = code - 2 ' code = code - 00000(010) DEBUG ? code SEROUT tx, Baud, ["!",CR,cr] SEROUT tx, Baud, [DEC code,CR,cr] ELSEIF serStr1(3) = 8 THEN ' Up arrow pressed DEBUG "up arrow", CR code = code + 3 ' code = code + 00000(011) DEBUG ? code SEROUT tx, Baud, ["!",CR,cr] SEROUT tx, Baud, [DEC code,CR,cr] SERIN 9,396,[STR serStr2\1] ' Wait for arrow release DEBUG CR DEBUG HEX2 serStr2(0), " ", HEX2 serStr2(1), " ", HEX2 serStr2(2), " ", HEX2 serStr2(3), " ", HEX2 serStr2(4), " ", HEX2 serStr2(5), " ", HEX2 serStr2(6), " ", CR code = code - 3 ' code = code - 00000(011) DEBUG ? code SEROUT tx, Baud, ["!",CR,cr] SEROUT tx, Baud, [DEC code,CR,cr] ELSEIF serStr1(3) = 16 THEN ' Down arrow pressed DEBUG "down arrow", CR code = code + 4 ' code = code + 00000(100) DEBUG ? code SEROUT tx, Baud, ["!",CR,cr] SEROUT tx, Baud, [DEC code,CR,cr] SERIN 9,396,[STR serStr2\1] ' Wait for arrow release DEBUG CR DEBUG HEX2 serStr2(0), " ", HEX2 serStr2(1), " ", HEX2 serStr2(2), " ", HEX2 serStr2(3), " ", HEX2 serStr2(4), " ", HEX2 serStr2(5), " ", HEX2 serStr2(6), " ", CR code = code - 4 ' code = code - 00000(100) DEBUG ? code SEROUT tx, Baud, ["!",CR,cr] SEROUT tx, Baud, [DEC code,CR,cr] ELSEIF serStr1(3) = 07 THEN ' This checks for a sent preset FOR cntr = 0 TO 6 serStrP (cntr) = serStr1 (cntr) NEXT ENDIF RETURN