Skip to content

Commit 94c7c89

Browse files
authored
Merge branch 'dev' into generalize_events
2 parents dafb803 + fba0e9f commit 94c7c89

File tree

2 files changed

+62
-2
lines changed

2 files changed

+62
-2
lines changed

arduino_alvik/arduino_alvik.py

Lines changed: 40 additions & 2 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])
@@ -194,11 +197,10 @@ def begin(self) -> int:
194197
self.set_illuminator(True)
195198
self.set_behaviour(1)
196199
self._set_color_reference()
197-
198200
if self._has_events_registered():
199201
print('Starting events thread')
200202
self._start_events_thread()
201-
203+
self.set_servo_positions(0, 0)
202204
return 0
203205

204206
def _has_events_registered(self) -> bool:
@@ -512,9 +514,19 @@ def set_servo_positions(self, a_position: int, b_position: int):
512514
:param b_position: position of B servomotor (0-180)
513515
:return:
514516
"""
517+
self._servo_positions[0] = a_position
518+
self._servo_positions[1] = b_position
515519
self._packeter.packetC2B(ord('S'), a_position & 0xFF, b_position & 0xFF)
516520
uart.write(self._packeter.msg[0:self._packeter.msg_size])
517521

522+
def get_servo_positions(self) -> (int, int):
523+
"""
524+
Returns the current servomotor positions
525+
:return: position of A/B servomotor (0-180)
526+
"""
527+
528+
return self._servo_positions[0], self._servo_positions[1]
529+
518530
def get_ack(self) -> str:
519531
"""
520532
Returns last acknowledgement
@@ -1237,6 +1249,32 @@ def _stop_events_thread(cls):
12371249
cls._events_thread_running = False
12381250

12391251

1252+
class _ArduinoAlvikServo:
1253+
1254+
def __init__(self, packeter: ucPack, label: str, servo_id: int, position: list[int | None]):
1255+
self._packeter = packeter
1256+
self._label = label
1257+
self._id = servo_id
1258+
self._position = position
1259+
1260+
def set_position(self, position):
1261+
"""
1262+
Sets the position of the servo
1263+
:param position:
1264+
:return:
1265+
"""
1266+
self._position[self._id] = position
1267+
self._packeter.packetC2B(ord('S'), self._position[0] & 0xFF, self._position[1] & 0xFF)
1268+
uart.write(self._packeter.msg[0:self._packeter.msg_size])
1269+
1270+
def get_position(self) -> int:
1271+
"""
1272+
Returns the position of the servo
1273+
:return:
1274+
"""
1275+
return self._position[self._id]
1276+
1277+
12401278
class _ArduinoAlvikWheel:
12411279

12421280
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)