'EXAMPLE PROGRAM #2 'QBASIC 'HTTP://WWW.ROBOTICS.COM/TRILOBOT 'OPEN THE SERIAL PORT. '(MAY BE NECESSARY TO CHANGE COM PORT) OPEN "COM1:9600,N,8,1" FOR RANDOM AS #1 'SETUP SCREEN. CLS PRINT "TriloGuard Program " PRINT INPUT "Enter delay in seconds ", D PRINT PRINT "TriloGuard mode active " ACTIONCODE = 1 SENSELOOP: 'READ PIR SENSOR. PRINT #1, "!1GP1"; R0$ = INPUT$(2, #1) GOSUB BYTETODEC IF R0 = 0 THEN GOTO SENSELOOP 'FLASH HEADLIGHT. IF ACTIONCODE = 1 THEN PRINT #1, "!1PL03"; A$ = INPUT$(1, #1) SLEEP 1 PRINT #1, "!1PL00"; A$ = INPUT$(1, #1) END IF 'WOOP UP SOUND EFFECT AND MOVE HEAD. IF ACTIONCODE = 2 THEN 'WOOP UP. PRINT #1, "!1PS09"; A$ = INPUT$(1, #1) 'HEAD SCAN. PRINT #1, "!1PH10A"; A$ = INPUT$(1, #1) 'HEAD STRAIGHT. PRINT #1, "!1PH101"; A$ = INPUT$(1, #1) END IF 'SPEAK HELLO. IF ACTIONCODE = 3 THEN PRINT #1, "!1PS82"; A$ = INPUT$(1, #1) END IF 'MOVE GRIPPER AND BEEPS. IF ACTIONCODE = 4 THEN 'BEEPS PRINT #1, "!1PS02"; A$ = INPUT$(1, #1) 'GRIPPER DOWN/OPEN PRINT #1, "!1PG101"; A$ = INPUT$(1, #1) SLEEP 1 'GRIPPER CLOSE/UP PRINT #1, "!1PG102"; A$ = INPUT$(1, #1) SLEEP 1 'GRIPPER RELAX PRINT #1, "!1PG100"; A$ = INPUT$(1, #1) END IF ACTIONCODE = ACTIONCODE + 1 IF ACTIONCODE = 5 THEN ACTIONCODE = 1 END IF 'DELAY SLEEP D GOTO SENSELOOP 'Convert a hexadecimal word in R0$ to decimal in R0 WORDTODEC: R1$ = MID$(R0$, 1, 1) GOSUB NIBTODEC R0 = R1 * 4096 R1$ = MID$(R0$, 2, 1) GOSUB NIBTODEC R0 = R0 + (R1 * 256) R1$ = MID$(R0$, 3, 1) GOSUB NIBTODEC R0 = R0 + (R1 * 16) R1$ = MID$(R0$, 4, 1) GOSUB NIBTODEC R0 = R0 + R1 RETURN 'Convert a hexadecimal byte in R0$ to decimal in R0 BYTETODEC: R1$ = MID$(R0$, 1, 1) GOSUB NIBTODEC R0 = R1 * 16 R1$ = MID$(R0$, 2, 1) GOSUB NIBTODEC R0 = R0 + R1 RETURN 'Convert a hexadecimal nibble in R1$ to decimal in R1 'This routine used by BYTETODEC AND WORDTODEC. NIBTODEC: IF R1$ = "A" THEN R1 = 10: RETURN IF R1$ = "B" THEN R1 = 11: RETURN IF R1$ = "C" THEN R1 = 12: RETURN IF R1$ = "D" THEN R1 = 13: RETURN IF R1$ = "E" THEN R1 = 14: RETURN IF R1$ = "F" THEN R1 = 15: RETURN R1 = VAL(R1$) RETURN