@@ -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+
12401278class _ArduinoAlvikWheel :
12411279
12421280 def __init__ (self , packeter : ucPack , label : int , wheel_diameter_mm : float = WHEEL_DIAMETER_MM ):
0 commit comments