Source Code:
'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:
|