@@ -243,7 +243,9 @@ def _set_attribute(self, attribute, name, value):
243243 else :
244244 attribute .seek (0 )
245245
246- attribute .write (value .encode ())
246+ if isinstance (value , str ):
247+ value = value .encode ()
248+ attribute .write (value )
247249 attribute .flush ()
248250 except Exception as ex :
249251 self ._raise_friendly_access_error (ex , name )
@@ -279,6 +281,9 @@ def get_attr_int(self, attribute, name):
279281 def set_attr_int (self , attribute , name , value ):
280282 return self ._set_attribute (attribute , name , str (int (value )))
281283
284+ def set_attr_raw (self , attribute , name , value ):
285+ return self ._set_attribute (attribute , name , value )
286+
282287 def get_attr_string (self , attribute , name ):
283288 return self ._get_attribute (attribute , name )
284289
@@ -2566,13 +2571,9 @@ class GyroSensor(Sensor):
25662571 """
25672572 LEGO EV3 gyro sensor.
25682573 """
2569-
25702574 SYSTEM_CLASS_NAME = Sensor .SYSTEM_CLASS_NAME
25712575 SYSTEM_DEVICE_NAME_CONVENTION = Sensor .SYSTEM_DEVICE_NAME_CONVENTION
25722576
2573- def __init__ (self , address = None , name_pattern = SYSTEM_DEVICE_NAME_CONVENTION , name_exact = False , ** kwargs ):
2574- super (GyroSensor , self ).__init__ (address , name_pattern , name_exact , driver_name = ['lego-ev3-gyro' ], ** kwargs )
2575-
25762577 #: Angle
25772578 MODE_GYRO_ANG = 'GYRO-ANG'
25782579
@@ -2588,15 +2589,25 @@ def __init__(self, address=None, name_pattern=SYSTEM_DEVICE_NAME_CONVENTION, nam
25882589 #: Calibration ???
25892590 MODE_GYRO_CAL = 'GYRO-CAL'
25902591
2592+ # Newer versions of the Gyro sensor also have an additional second axis
2593+ # accessible via the TILT-ANGLE and TILT-RATE modes that is not usable
2594+ # using the official EV3-G blocks
2595+ MODE_TILT_ANG = 'TILT-ANGLE'
2596+ MODE_TILT_RATE = 'TILT-RATE'
25912597
25922598 MODES = (
2593- 'GYRO-ANG' ,
2594- 'GYRO-RATE' ,
2595- 'GYRO-FAS' ,
2596- 'GYRO-G&A' ,
2597- 'GYRO-CAL' ,
2599+ MODE_GYRO_ANG ,
2600+ MODE_GYRO_RATE ,
2601+ MODE_GYRO_FAS ,
2602+ MODE_GYRO_G_A ,
2603+ MODE_GYRO_CAL ,
2604+ MODE_TILT_ANG ,
2605+ MODE_TILT_RATE ,
25982606 )
25992607
2608+ def __init__ (self , address = None , name_pattern = SYSTEM_DEVICE_NAME_CONVENTION , name_exact = False , ** kwargs ):
2609+ super (GyroSensor , self ).__init__ (address , name_pattern , name_exact , driver_name = ['lego-ev3-gyro' ], ** kwargs )
2610+ self ._direct = None
26002611
26012612 @property
26022613 def angle (self ):
@@ -2623,6 +2634,20 @@ def rate_and_angle(self):
26232634 self .mode = self .MODE_GYRO_G_A
26242635 return self .value (0 ), self .value (1 )
26252636
2637+ @property
2638+ def tilt_angle (self ):
2639+ self .mode = self .MODE_TILT_ANG
2640+ return self .value (0 )
2641+
2642+ @property
2643+ def tilt_rate (self ):
2644+ self .mode = self .MODE_TILT_RATE
2645+ return self .value (0 )
2646+
2647+ def reset (self ):
2648+ self .mode = self .MODE_GYRO_ANG
2649+ self ._direct = self .set_attr_raw (self ._direct , 'direct' , 17 )
2650+
26262651
26272652class ButtonBase (object ):
26282653 """
0 commit comments