Writing arm.bas Source Code



My Blog:

Below is the source code for the Q-BASIC program, Asteroid.

Back to: Main Programming Page


'Robotic Arm Simulation
'
'Programmed by Jeff Lewis
'Use the numeric keypad with Num Lock on to control the arm
'7 and 9 rotate the shoulder
'4 and 6 rotate the elbow
'1 and 3 open and close the hand




SCREEN 7

shoulderangle = 270
elbowangle = 90
handangle = 45
CONST pi = 3.14159265359#
DIM objectx(5)
DIM objecty(5)
grab = -1

FOR ctr = 0 TO 5
objectx(ctr) = 230
NEXT ctr

y = 50

FOR ctr = 0 TO 5
objecty(ctr) = y
y = y + 20
NEXT ctr

FOR ctr = 0 TO 5
grab(ctr) = 0
NEXT ctr

a:

angle = shoulderangle * (pi / 180)
elbowx = 160 + 40 * COS(angle)
elbowy = 100 - 40 * SIN(angle)

angle = (elbowangle + shoulderangle) * (pi / 180)
wristx = elbowx + 40 * COS(angle)
wristy = elbowy - 40 * SIN(angle)

angle = (45 + elbowangle + shoulderangle) * (pi / 180)
angle2 = (-45 + elbowangle + shoulderangle) * (pi / 180)
hand1x = wristx + 5 * COS(angle)
hand1y = wristy - 5 * SIN(angle)
hand2x = wristx + 5 * COS(angle2)
hand2y = wristy - 5 * SIN(angle2)

angle = (handangle + elbowangle + shoulderangle) * (pi / 180)
angle2 = (-handangle + elbowangle + shoulderangle) * (pi / 180)
finger1x = hand1x + 5 * COS(angle)
finger1y = hand1y - 5 * SIN(angle)
finger2x = hand2x + 5 * COS(angle2)
finger2y = hand2y - 5 * SIN(angle2)

IF closed = 1 THEN
FOR ctr = 0 TO 5
IF finger1x < objectx(ctr) + 5 AND finger1x > objectx(ctr) - 5 AND finger1y < objecty(ctr) + 5 AND finger1y > objecty(ctr) - 5 THEN
grab = ctr
END IF
NEXT ctr
END IF

IF grab > -1 THEN
objectx(grab) = finger1x
objecty(grab) = finger1y
END IF


CLS

LINE (160, 100)-(elbowx, elbowy)
LINE (elbowx, elbowy)-(wristx, wristy)
LINE (wristx, wristy)-(hand1x, hand1y)
LINE (wristx, wristy)-(hand2x, hand2y)
LINE (hand1x, hand1y)-(finger1x, finger1y)
LINE (hand2x, hand2y)-(finger2x, finger2y)

dotcolor = 4

'PSET (160, 100), dotcolor
PSET (elbowx, elbowy), dotcolor
PSET (wristx, wristy), dotcolor
PSET (hand1x, hand1y), dotcolor
PSET (hand2x, hand2y), dotcolor
'PSET (finger1x, finger1y), dotcolor
'PSET (finger2x, finger2y), dotcolor

FOR ctr = 0 TO 5
CIRCLE (objectx(ctr), objecty(ctr)), 5, ctr + 9
NEXT ctr



b:
getkey$ = INKEY$
IF getkey$ = "" THEN
GOTO b:
END IF

closed = 0

SELECT CASE getkey$
CASE "q"
GOTO quit
CASE "7"
shoulderangle = shoulderangle + 5
CASE "9"
shoulderangle = shoulderangle - 5
CASE "4"
elbowangle = elbowangle + 5
CASE "6"
elbowangle = elbowangle - 5
CASE "1"
handangle = 45
grab = -1
CASE "3"
handangle = -45
closed = 1
END SELECT




GOTO a

quit:



Questions? Comments? E-mail me: webmaster@jefflewis.net

Valid HTML 4.01!