Skip to content

Commit 7666182

Browse files
committed
robotic arm
1 parent c12fb51 commit 7666182

1 file changed

Lines changed: 20 additions & 0 deletions

File tree

pslab/external/motor.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
>>> servo.angle = 30 # Turn motor to 30 degrees position.
88
"""
99

10+
import time
11+
from typing import List
1012
from typing import Union
1113

1214
from pslab.instrument.waveform_generator import PWMGenerator
@@ -70,3 +72,21 @@ def _get_duty_cycle(self, angle):
7072
angle *= self._max_angle_pulse - self._min_angle_pulse # Scale
7173
angle += self._min_angle_pulse # Offset
7274
return angle / (self._frequency**-1 * MICROSECONDS)
75+
76+
77+
class RoboticArm:
78+
MAX_SERVOS = 4
79+
80+
def __init__(self, servos: List[Servo]) -> None:
81+
if len(servos) > RoboticArm.MAX_SERVOS:
82+
raise ValueError(
83+
f"At most {RoboticArm.MAX_SERVOS} servos can be used, got {len(servos)}"
84+
)
85+
self.servos = servos
86+
87+
def run_schedule(self, timeline: List[List[int]]) -> None:
88+
for i in range(len(timeline)):
89+
for j in range(len(self.servos)):
90+
angle = timeline[i][j]
91+
self.servos[j].angle = angle
92+
time.sleep(1)

0 commit comments

Comments
 (0)