Skip to content

Commit 1d61fee

Browse files
authored
EV3-G API GyroSensor (#387)
* EV3-G API GyroSensor * Drop 'raw' variable, minor cleanup
1 parent 6315c83 commit 1d61fee

File tree

1 file changed

+35
-10
lines changed

1 file changed

+35
-10
lines changed

ev3dev/core.py

Lines changed: 35 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -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

26272652
class ButtonBase(object):
26282653
"""

0 commit comments

Comments
 (0)