Skip to content

Commit dbec9de

Browse files
committed
feat: set single servo position
1 parent 5e9d739 commit dbec9de

File tree

2 files changed

+47
-0
lines changed

2 files changed

+47
-0
lines changed

arduino_alvik/arduino_alvik.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ def __init__(self):
2929
self._packeter = ucPack(200)
3030
self.left_wheel = _ArduinoAlvikWheel(self._packeter, ord('L'))
3131
self.right_wheel = _ArduinoAlvikWheel(self._packeter, ord('R'))
32+
self._servo_positions = list((None, None,))
33+
self.servo_A = _ArduinoAlvikServo(self._packeter, 'A', 0, self._servo_positions)
34+
self.servo_B = _ArduinoAlvikServo(self._packeter, 'B', 1, self._servo_positions)
3235
self._led_state = list((None,))
3336
self.left_led = self.DL1 = _ArduinoAlvikRgbLed(self._packeter, 'left', self._led_state,
3437
rgb_mask=[0b00000100, 0b00001000, 0b00010000])
@@ -195,6 +198,7 @@ def begin(self) -> int:
195198
self.set_illuminator(True)
196199
self.set_behaviour(1)
197200
self._set_color_reference()
201+
self.set_servo_positions(0, 0)
198202
return 0
199203

200204
def _has_events_registered(self) -> bool:
@@ -508,6 +512,8 @@ def set_servo_positions(self, a_position: int, b_position: int):
508512
:param b_position: position of B servomotor (0-180)
509513
:return:
510514
"""
515+
self._servo_positions[0] = a_position
516+
self._servo_positions[1] = b_position
511517
self._packeter.packetC2B(ord('S'), a_position & 0xFF, b_position & 0xFF)
512518
uart.write(self._packeter.msg[0:self._packeter.msg_size])
513519

@@ -1223,6 +1229,25 @@ def _stop_events_thread(cls):
12231229
cls._events_thread_running = False
12241230

12251231

1232+
class _ArduinoAlvikServo:
1233+
1234+
def __init__(self, packeter: ucPack, label: str, servo_id: int, position: list[int | None]):
1235+
self._packeter = packeter
1236+
self._label = label
1237+
self._id = servo_id
1238+
self._position = position
1239+
1240+
def set_position(self, position):
1241+
"""
1242+
Sets the position of the servo
1243+
:param position:
1244+
:return:
1245+
"""
1246+
self._position[self._id] = position
1247+
self._packeter.packetC2B(ord('S'), self._position[0] & 0xFF, self._position[1] & 0xFF)
1248+
uart.write(self._packeter.msg[0:self._packeter.msg_size])
1249+
1250+
12261251
class _ArduinoAlvikWheel:
12271252

12281253
def __init__(self, packeter: ucPack, label: int, wheel_diameter_mm: float = WHEEL_DIAMETER_MM):

examples/set_servo.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
from arduino_alvik import ArduinoAlvik
2+
from time import sleep_ms
3+
import sys
4+
5+
alvik = ArduinoAlvik()
6+
alvik.begin()
7+
8+
i = 0
9+
10+
while True:
11+
try:
12+
13+
alvik.servo_A.set_position(i)
14+
alvik.servo_B.set_position(i)
15+
16+
i = (i + 1) % 180
17+
18+
sleep_ms(100)
19+
except KeyboardInterrupt as e:
20+
print('over')
21+
alvik.stop()
22+
sys.exit()

0 commit comments

Comments
 (0)