Skip to content

Commit 798cad1

Browse files
authored
Scale values of type 'float' when returned from special sensor classes (#330)
* Scale values of type 'float' when returned from special sensor classes Fixes #329
1 parent 579111c commit 798cad1

File tree

2 files changed

+21
-7
lines changed

2 files changed

+21
-7
lines changed

ev3dev/core.py

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1613,6 +1613,7 @@ def __init__(self, address=None, name_pattern=SYSTEM_DEVICE_NAME_CONVENTION, nam
16131613
self._bin_data_format = None
16141614
self._bin_data_size = None
16151615
self._bin_data = None
1616+
self._mode_scale = {}
16161617

16171618
__slots__ = [
16181619
# ~autogen generic-class-slots classes.sensor>currentClass
@@ -1632,8 +1633,21 @@ def __init__(self, address=None, name_pattern=SYSTEM_DEVICE_NAME_CONVENTION, nam
16321633
'_bin_data_format',
16331634
'_bin_data_size',
16341635
'_bin_data',
1636+
'_mode_scale'
16351637
]
16361638

1639+
def _scale(self, mode):
1640+
"""
1641+
Returns value scaling coefficient for the given mode.
1642+
"""
1643+
if mode in self._mode_scale:
1644+
scale = self._mode_scale[mode]
1645+
else:
1646+
scale = 10**(-self.decimals)
1647+
self._mode_scale[mode] = scale
1648+
1649+
return scale
1650+
16371651
# ~autogen generic-get-set classes.sensor>currentClass
16381652

16391653
@property
@@ -2116,7 +2130,7 @@ def distance_centimeters(self):
21162130
if self.auto_mode:
21172131
self.mode = self.MODE_US_DIST_CM
21182132

2119-
return self.value(0)
2133+
return self.value(0) * self._scale('US_DIST_CM')
21202134

21212135
@property
21222136
def distance_inches(self):
@@ -2128,7 +2142,7 @@ def distance_inches(self):
21282142
if self.auto_mode:
21292143
self.mode = self.MODE_US_DIST_IN
21302144

2131-
return self.value(0)
2145+
return self.value(0) * self._scale('US_DIST_IN')
21322146

21332147
@property
21342148
def other_sensor_present(self):
@@ -2309,7 +2323,7 @@ def sound_pressure(self):
23092323
if self.auto_mode:
23102324
self.mode = self.MODE_DB
23112325

2312-
return self.value(0)
2326+
return self.value(0) * self._scale('DB')
23132327

23142328
@property
23152329
def sound_pressure_low(self):
@@ -2321,7 +2335,7 @@ def sound_pressure_low(self):
23212335
if self.auto_mode:
23222336
self.mode = self.MODE_DBA
23232337

2324-
return self.value(0)
2338+
return self.value(0) * self._scale('DBA')
23252339

23262340
class LightSensor(Sensor):
23272341

@@ -2361,7 +2375,7 @@ def reflected_light_intensity(self):
23612375
if self.auto_mode:
23622376
self.mode = self.MODE_REFLECT
23632377

2364-
return self.value(0)
2378+
return self.value(0) * self._scale('REFLECT')
23652379

23662380
@property
23672381
def ambient_light_intensity(self):
@@ -2372,7 +2386,7 @@ def ambient_light_intensity(self):
23722386
if self.auto_mode:
23732387
self.mode = self.MODE_AMBIENT
23742388

2375-
return self.value(0)
2389+
return self.value(0) * self._scale('AMBIENT')
23762390

23772391

23782392
# ~autogen

templates/special-sensors.liquid

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ assign propName = prop.propertyName | upcase | underscore_spaces%}
8787

8888
return {%
8989
for value_index in mapping.sourceValue
90-
%}self.value({{ value_index }}){% unless forloop.last %}, {% endunless %}{%
90+
%}self.value({{ value_index }}){% if mapping.type contains 'float' %} * self._scale('{{ mode }}'){% endif %}{% unless forloop.last %}, {% endunless %}{%
9191
endfor %}
9292
{% endfor %}{%
9393
endfor %}

0 commit comments

Comments
 (0)