@@ -108,7 +108,14 @@ def __init__(self, port):
108
108
super ().__init__ (port )
109
109
self .default_speed = 20
110
110
self ._currentspeed = 0
111
- self .mode ([(1 , 0 ), (2 , 0 ), (3 , 0 )])
111
+ if self ._typeid in {38 }:
112
+ self .mode ([(1 , 0 ), (2 , 0 )])
113
+ self ._combi = "1 0 2 0"
114
+ self ._noapos = True
115
+ else :
116
+ self .mode ([(1 , 0 ), (2 , 0 ), (3 , 0 )])
117
+ self ._combi = "1 0 2 0 3 0"
118
+ self ._noapos = False
112
119
self .plimit (0.7 )
113
120
self .bias (0.3 )
114
121
self ._release = True
@@ -160,7 +167,10 @@ def _run_to_position(self, degrees, speed, direction):
160
167
self ._runmode = MotorRunmode .DEGREES
161
168
data = self .get ()
162
169
pos = data [1 ]
163
- apos = data [2 ]
170
+ if self ._noapos :
171
+ apos = pos
172
+ else :
173
+ apos = data [2 ]
164
174
diff = (degrees - apos + 180 ) % 360 - 180
165
175
newpos = (pos + diff ) / 360
166
176
v1 = (degrees - apos ) % 360
@@ -192,7 +202,7 @@ def _run_positional_ramp(self, pos, newpos, speed):
192
202
# Collapse speed range to -5 to 5
193
203
speed *= 0.05
194
204
dur = abs ((newpos - pos ) / speed )
195
- cmd = (f"port { self .port } ; combi 0 1 0 2 0 3 0 ; select 0 ; pid { self .port } 0 1 s4 0.0027777778 0 5 0 .1 3 ; "
205
+ cmd = (f"port { self .port } ; combi 0 { self . _combi } ; select 0 ; pid { self .port } 0 1 s4 0.0027777778 0 5 0 .1 3 ; "
196
206
f"set ramp { pos } { newpos } { dur } 0\r " )
197
207
self ._write (cmd )
198
208
with self ._hat .rampcond [self .port ]:
@@ -248,7 +258,7 @@ def run_to_position(self, degrees, speed=None, blocking=True, direction="shortes
248
258
249
259
def _run_for_seconds (self , seconds , speed ):
250
260
self ._runmode = MotorRunmode .SECONDS
251
- cmd = (f"port { self .port } ; combi 0 1 0 2 0 3 0 ; select 0 ; pid { self .port } 0 0 s1 1 0 0.003 0.01 0 100; "
261
+ cmd = (f"port { self .port } ; combi 0 { self . _combi } ; select 0 ; pid { self .port } 0 0 s1 1 0 0.003 0.01 0 100; "
252
262
f"set pulse { speed } 0.0 { seconds } 0\r " )
253
263
self ._write (cmd )
254
264
with self ._hat .pulsecond [self .port ]:
@@ -298,7 +308,7 @@ def start(self, speed=None):
298
308
raise MotorError ("Invalid Speed" )
299
309
cmd = f"port { self .port } ; set { speed } \r "
300
310
if self ._runmode == MotorRunmode .NONE :
301
- cmd = (f"port { self .port } ; combi 0 1 0 2 0 3 0 ; select 0 ; pid { self .port } 0 0 s1 1 0 0.003 0.01 0 100; "
311
+ cmd = (f"port { self .port } ; combi 0 { self . _combi } ; select 0 ; pid { self .port } 0 0 s1 1 0 0.003 0.01 0 100; "
302
312
f"set { speed } \r " )
303
313
self ._runmode = MotorRunmode .FREE
304
314
self ._currentspeed = speed
@@ -324,7 +334,10 @@ def get_aposition(self):
324
334
:return: Absolute position of motor from -180 to 180
325
335
:rtype: int
326
336
"""
327
- return self .get ()[2 ]
337
+ if self ._noapos :
338
+ raise MotorError ("No absolute position with this motor" )
339
+ else :
340
+ return self .get ()[2 ]
328
341
329
342
def get_speed (self ):
330
343
"""Get speed of motor
@@ -346,7 +359,11 @@ def when_rotated(self):
346
359
return self ._when_rotated
347
360
348
361
def _intermediate (self , data ):
349
- speed , pos , apos = data
362
+ if self ._noapos :
363
+ speed , pos = data
364
+ apos = None
365
+ else :
366
+ speed , pos , apos = data
350
367
if self ._oldpos is None :
351
368
self ._oldpos = pos
352
369
return
0 commit comments