3
3
import struct
4
4
from machine import I2C
5
5
import _thread
6
- from time import sleep_ms
6
+ from time import sleep_ms , ticks_ms , ticks_diff
7
7
8
8
from ucPack import ucPack
9
9
@@ -229,9 +229,14 @@ def _stop_update_thread(cls):
229
229
"""
230
230
cls ._update_thread_running = False
231
231
232
- def _wait_for_target (self ):
233
- while not self .is_target_reached ():
234
- pass
232
+ def _wait_for_target (self , timeout ):
233
+ start = ticks_ms ()
234
+ while True :
235
+ if self .is_target_reached ():
236
+ print ("ACK received" )
237
+ if ticks_diff (ticks_ms (), start ) >= timeout * 1000 :
238
+ print ('timeout reached' )
239
+ break
235
240
236
241
def is_target_reached (self ) -> bool :
237
242
"""
@@ -243,8 +248,8 @@ def is_target_reached(self) -> bool:
243
248
sleep_ms (50 )
244
249
return False
245
250
else :
246
- self ._packeter .packetC1B (ord ('X' ), ord ('K' ))
247
- uart .write (self ._packeter .msg [0 :self ._packeter .msg_size ])
251
+ # self._packeter.packetC1B(ord('X'), ord('K'))
252
+ # uart.write(self._packeter.msg[0:self._packeter.msg_size])
248
253
sleep_ms (200 )
249
254
return True
250
255
@@ -270,7 +275,7 @@ def rotate(self, angle: float, unit: str = 'deg', blocking: bool = True):
270
275
self ._packeter .packetC1F (ord ('R' ), angle )
271
276
uart .write (self ._packeter .msg [0 :self ._packeter .msg_size ])
272
277
if blocking :
273
- self ._wait_for_target ()
278
+ self ._wait_for_target (timeout = ( angle / MOTOR_CONTROL_DEG_S ) * 1.05 )
274
279
275
280
def move (self , distance : float , unit : str = 'cm' , blocking : bool = True ):
276
281
"""
@@ -285,7 +290,7 @@ def move(self, distance: float, unit: str = 'cm', blocking: bool = True):
285
290
self ._packeter .packetC1F (ord ('G' ), distance )
286
291
uart .write (self ._packeter .msg [0 :self ._packeter .msg_size ])
287
292
if blocking :
288
- self ._wait_for_target ()
293
+ self ._wait_for_target (timeout = ( distance / MOTOR_CONTROL_MM_S ) * 1.05 )
289
294
290
295
def stop (self ):
291
296
"""
0 commit comments