Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 35 additions & 10 deletions ev3dev/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -241,7 +241,9 @@ def _set_attribute(self, attribute, name, value):
else:
attribute.seek(0)

attribute.write(value.encode())
if isinstance(value, str):
value = value.encode()
attribute.write(value)
attribute.flush()
except Exception as ex:
self._raise_friendly_access_error(ex, name)
Expand Down Expand Up @@ -277,6 +279,9 @@ def get_attr_int(self, attribute, name):
def set_attr_int(self, attribute, name, value):
return self._set_attribute(attribute, name, str(int(value)))

def set_attr_raw(self, attribute, name, value):
return self._set_attribute(attribute, name, value)

def get_attr_string(self, attribute, name):
return self._get_attribute(attribute, name)

Expand Down Expand Up @@ -2566,13 +2571,9 @@ class GyroSensor(Sensor):
"""
LEGO EV3 gyro sensor.
"""

SYSTEM_CLASS_NAME = Sensor.SYSTEM_CLASS_NAME
SYSTEM_DEVICE_NAME_CONVENTION = Sensor.SYSTEM_DEVICE_NAME_CONVENTION

def __init__(self, address=None, name_pattern=SYSTEM_DEVICE_NAME_CONVENTION, name_exact=False, **kwargs):
super(GyroSensor, self).__init__(address, name_pattern, name_exact, driver_name=['lego-ev3-gyro'], **kwargs)

#: Angle
MODE_GYRO_ANG = 'GYRO-ANG'

Expand All @@ -2588,15 +2589,25 @@ def __init__(self, address=None, name_pattern=SYSTEM_DEVICE_NAME_CONVENTION, nam
#: Calibration ???
MODE_GYRO_CAL = 'GYRO-CAL'

# Newer versions of the Gyro sensor also have an additional second axis
# accessible via the TILT-ANGLE and TILT-RATE modes that is not usable
# using the official EV3-G blocks
MODE_TILT_ANG = 'TILT-ANGLE'
MODE_TILT_RATE = 'TILT-RATE'

MODES = (
'GYRO-ANG',
'GYRO-RATE',
'GYRO-FAS',
'GYRO-G&A',
'GYRO-CAL',
MODE_GYRO_ANG,
MODE_GYRO_RATE,
MODE_GYRO_FAS,
MODE_GYRO_G_A,
MODE_GYRO_CAL,
MODE_TILT_ANG,
MODE_TILT_RATE,
)

def __init__(self, address=None, name_pattern=SYSTEM_DEVICE_NAME_CONVENTION, name_exact=False, **kwargs):
super(GyroSensor, self).__init__(address, name_pattern, name_exact, driver_name=['lego-ev3-gyro'], **kwargs)
self._direct = None

@property
def angle(self):
Expand All @@ -2623,6 +2634,20 @@ def rate_and_angle(self):
self.mode = self.MODE_GYRO_G_A
return self.value(0), self.value(1)

@property
def tilt_angle(self):
self.mode = self.MODE_TILT_ANG
return self.value(0)

@property
def tilt_rate(self):
self.mode = self.MODE_TILT_RATE
return self.value(0)

def reset(self):
self.mode = self.MODE_GYRO_ANG
self._direct = self.set_attr_raw(self._direct, 'direct', 17)


class ButtonBase(object):
"""
Expand Down