From 811db2ecf594168a18a62b7d983e723cc4202505 Mon Sep 17 00:00:00 2001 From: Esteban Martinez Date: Sun, 22 Feb 2026 18:30:04 -0800 Subject: [PATCH] Add Method to set all finger angles in one write --- inspire_hand/hand.py | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/inspire_hand/hand.py b/inspire_hand/hand.py index 3dce5c9..166d40e 100644 --- a/inspire_hand/hand.py +++ b/inspire_hand/hand.py @@ -253,6 +253,38 @@ def set_finger_angle(self, finger_id: int, angle: int) -> None: register_address = Register.ANGLE_SET + (finger_id * 2) self.modbus.write_single_register(register_address, angle) + def set_finger_angles( + self, + little: int, + ring: int, + middle: int, + index: int, + thumb_bend: int, + thumb_rotate: int, + ) -> None: + """ + Set the angle of each finger individually in a single write. + + Args: + little: Angle for the little finger (0-1000) + ring: Angle for the ring finger (0-1000) + middle: Angle for the middle finger (0-1000) + index: Angle for the index finger (0-1000) + thumb_bend: Angle for thumb bend (0-1000) + thumb_rotate: Angle for thumb rotation (0-1000) + """ + self._check_connection() + + values = [little, ring, middle, index, thumb_bend, thumb_rotate] + for name, v in zip( + ("little", "ring", "middle", "index", "thumb_bend", "thumb_rotate"), + values, + ): + if not 0 <= v <= 1000: + raise ValueError(f"Invalid angle for {name}. Must be 0-1000.") + + self.modbus.write_multiple_registers(Register.ANGLE_SET, values) + def set_all_finger_speeds(self, speed: int) -> None: """ Set the speed for all fingers.