@@ -108,7 +108,14 @@ def __init__(self, port):
108108 super ().__init__ (port )
109109 self .default_speed = 20
110110 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
112119 self .plimit (0.7 )
113120 self .bias (0.3 )
114121 self ._release = True
@@ -160,7 +167,10 @@ def _run_to_position(self, degrees, speed, direction):
160167 self ._runmode = MotorRunmode .DEGREES
161168 data = self .get ()
162169 pos = data [1 ]
163- apos = data [2 ]
170+ if self ._noapos :
171+ apos = pos
172+ else :
173+ apos = data [2 ]
164174 diff = (degrees - apos + 180 ) % 360 - 180
165175 newpos = (pos + diff ) / 360
166176 v1 = (degrees - apos ) % 360
@@ -192,7 +202,7 @@ def _run_positional_ramp(self, pos, newpos, speed):
192202 # Collapse speed range to -5 to 5
193203 speed *= 0.05
194204 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 ; "
196206 f"set ramp { pos } { newpos } { dur } 0\r " )
197207 self ._write (cmd )
198208 with self ._hat .rampcond [self .port ]:
@@ -248,7 +258,7 @@ def run_to_position(self, degrees, speed=None, blocking=True, direction="shortes
248258
249259 def _run_for_seconds (self , seconds , speed ):
250260 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; "
252262 f"set pulse { speed } 0.0 { seconds } 0\r " )
253263 self ._write (cmd )
254264 with self ._hat .pulsecond [self .port ]:
@@ -298,7 +308,7 @@ def start(self, speed=None):
298308 raise MotorError ("Invalid Speed" )
299309 cmd = f"port { self .port } ; set { speed } \r "
300310 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; "
302312 f"set { speed } \r " )
303313 self ._runmode = MotorRunmode .FREE
304314 self ._currentspeed = speed
@@ -324,7 +334,10 @@ def get_aposition(self):
324334 :return: Absolute position of motor from -180 to 180
325335 :rtype: int
326336 """
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 ]
328341
329342 def get_speed (self ):
330343 """Get speed of motor
@@ -346,7 +359,11 @@ def when_rotated(self):
346359 return self ._when_rotated
347360
348361 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
350367 if self ._oldpos is None :
351368 self ._oldpos = pos
352369 return
0 commit comments