@@ -70,6 +70,8 @@ def __init__(self):
70
70
self ._last_ack = ''
71
71
self ._version = [None , None , None ]
72
72
self ._touch_events = _ArduinoAlvikTouchEvents ()
73
+ self ._time_skip = ticks_ms ()
74
+ self ._TIMEOUT = 0
73
75
74
76
@staticmethod
75
77
def is_on () -> bool :
@@ -246,14 +248,17 @@ def is_target_reached(self) -> bool:
246
248
It also responds with an ack received message
247
249
:return:
248
250
"""
249
- if self ._last_ack != ord ('M' ) and self ._last_ack != ord ('R' ):
250
- sleep_ms (50 )
251
- return False
252
- else :
253
- # self._packeter.packetC1B(ord('X'), ord('K'))
254
- # uart.write(self._packeter.msg[0:self._packeter.msg_size])
255
- sleep_ms (200 )
256
- return True
251
+ if ticks_diff (ticks_ms (), self ._time_skip ) > self ._TIMEOUT :
252
+
253
+ if self ._last_ack != ord ('M' ) and self ._last_ack != ord ('R' ):
254
+ sleep_ms (50 )
255
+ return False
256
+ else :
257
+ # self._packeter.packetC1B(ord('X'), ord('K'))
258
+ # uart.write(self._packeter.msg[0:self._packeter.msg_size])
259
+ sleep_ms (200 )
260
+ return True
261
+ return False
257
262
258
263
def set_behaviour (self , behaviour : int ):
259
264
"""
@@ -274,9 +279,11 @@ def rotate(self, angle: float, unit: str = 'deg', blocking: bool = True):
274
279
"""
275
280
angle = convert_angle (angle , unit , 'deg' )
276
281
sleep_ms (200 )
282
+ self ._time_skip = ticks_ms ()
277
283
self ._packeter .packetC1F (ord ('R' ), angle )
278
284
uart .write (self ._packeter .msg [0 :self ._packeter .msg_size ])
279
285
if blocking :
286
+ self ._TIMEOUT = (angle / MOTOR_CONTROL_DEG_S )* 1.05
280
287
self ._wait_for_target (timeout = (angle / MOTOR_CONTROL_DEG_S )* 1.05 )
281
288
282
289
def move (self , distance : float , unit : str = 'cm' , blocking : bool = True ):
@@ -289,9 +296,11 @@ def move(self, distance: float, unit: str = 'cm', blocking: bool = True):
289
296
"""
290
297
distance = convert_distance (distance , unit , 'mm' )
291
298
sleep_ms (200 )
299
+ self ._time_skip = ticks_ms ()
292
300
self ._packeter .packetC1F (ord ('G' ), distance )
293
301
uart .write (self ._packeter .msg [0 :self ._packeter .msg_size ])
294
302
if blocking :
303
+ self ._TIMEOUT = (distance / MOTOR_CONTROL_MM_S )* 1.05
295
304
self ._wait_for_target (timeout = (distance / MOTOR_CONTROL_MM_S )* 1.05 )
296
305
297
306
def stop (self ):
0 commit comments