Skip to content

Commit 86c1bbf

Browse files
committed
Setting mode before reading special sensor value is optional
1 parent de33835 commit 86c1bbf

File tree

2 files changed

+57
-38
lines changed

2 files changed

+57
-38
lines changed

ev3dev/core.py

Lines changed: 54 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1653,13 +1653,14 @@ def __init__(self, address=None, name_pattern=SYSTEM_DEVICE_NAME_CONVENTION, nam
16531653
MODE_TOUCH = 'TOUCH'
16541654

16551655

1656-
def is_pressed(self):
1656+
def is_pressed(self, set_mode=True):
16571657
"""
16581658
A boolean indicating whether the current touch sensor is being
16591659
pressed.
16601660
"""
16611661

1662-
self.mode = self.MODE_TOUCH
1662+
if set_mode:
1663+
self.mode = self.MODE_TOUCH
16631664

16641665
return self.value(0)
16651666

@@ -1692,25 +1693,27 @@ def __init__(self, address=None, name_pattern=SYSTEM_DEVICE_NAME_CONVENTION, nam
16921693
MODE_RGB_RAW = 'RGB-RAW'
16931694

16941695

1695-
def reflected_light_intensity(self):
1696+
def reflected_light_intensity(self, set_mode=True):
16961697
"""
16971698
Reflected light intensity as a percentage. Light on sensor is red.
16981699
"""
16991700

1700-
self.mode = self.MODE_COL_REFLECT
1701+
if set_mode:
1702+
self.mode = self.MODE_COL_REFLECT
17011703

17021704
return self.value(0)
17031705

1704-
def ambient_light_intensity(self):
1706+
def ambient_light_intensity(self, set_mode=True):
17051707
"""
17061708
Ambient light intensity. Light on sensor is dimly lit blue.
17071709
"""
17081710

1709-
self.mode = self.MODE_COL_AMBIENT
1711+
if set_mode:
1712+
self.mode = self.MODE_COL_AMBIENT
17101713

17111714
return self.value(0)
17121715

1713-
def color(self):
1716+
def color(self, set_mode=True):
17141717
"""
17151718
Color detected by the sensor, categorized by overall value.
17161719
- 0: No color
@@ -1723,34 +1726,38 @@ def color(self):
17231726
- 7: Brown
17241727
"""
17251728

1726-
self.mode = self.MODE_COL_COLOR
1729+
if set_mode:
1730+
self.mode = self.MODE_COL_COLOR
17271731

17281732
return self.value(0)
17291733

1730-
def red(self):
1734+
def red(self, set_mode=True):
17311735
"""
17321736
Red component of the detected color, in the range 0-1020.
17331737
"""
17341738

1735-
self.mode = self.MODE_RGB_RAW
1739+
if set_mode:
1740+
self.mode = self.MODE_RGB_RAW
17361741

17371742
return self.value(0)
17381743

1739-
def green(self):
1744+
def green(self, set_mode=True):
17401745
"""
17411746
Green component of the detected color, in the range 0-1020.
17421747
"""
17431748

1744-
self.mode = self.MODE_RGB_RAW
1749+
if set_mode:
1750+
self.mode = self.MODE_RGB_RAW
17451751

17461752
return self.value(1)
17471753

1748-
def blue(self):
1754+
def blue(self, set_mode=True):
17491755
"""
17501756
Blue component of the detected color, in the range 0-1020.
17511757
"""
17521758

1753-
self.mode = self.MODE_RGB_RAW
1759+
if set_mode:
1760+
self.mode = self.MODE_RGB_RAW
17541761

17551762
return self.value(2)
17561763

@@ -1783,33 +1790,36 @@ def __init__(self, address=None, name_pattern=SYSTEM_DEVICE_NAME_CONVENTION, nam
17831790
MODE_US_SI_IN = 'US-SI-IN'
17841791

17851792

1786-
def distance_centimeters(self):
1793+
def distance_centimeters(self, set_mode=True):
17871794
"""
17881795
Measurement of the distance detected by the sensor,
17891796
in centimeters.
17901797
"""
17911798

1792-
self.mode = self.MODE_US_DIST_CM
1799+
if set_mode:
1800+
self.mode = self.MODE_US_DIST_CM
17931801

17941802
return self.value(0)
17951803

1796-
def distance_inches(self):
1804+
def distance_inches(self, set_mode=True):
17971805
"""
17981806
Measurement of the distance detected by the sensor,
17991807
in inches.
18001808
"""
18011809

1802-
self.mode = self.MODE_US_DIST_IN
1810+
if set_mode:
1811+
self.mode = self.MODE_US_DIST_IN
18031812

18041813
return self.value(0)
18051814

1806-
def other_sensor_present(self):
1815+
def other_sensor_present(self, set_mode=True):
18071816
"""
18081817
Value indicating whether another ultrasonic sensor could
18091818
be heard nearby.
18101819
"""
18111820

1812-
self.mode = self.MODE_US_LISTEN
1821+
if set_mode:
1822+
self.mode = self.MODE_US_LISTEN
18131823

18141824
return self.value(0)
18151825

@@ -1842,31 +1852,34 @@ def __init__(self, address=None, name_pattern=SYSTEM_DEVICE_NAME_CONVENTION, nam
18421852
MODE_GYRO_CAL = 'GYRO-CAL'
18431853

18441854

1845-
def angle(self):
1855+
def angle(self, set_mode=True):
18461856
"""
18471857
The number of degrees that the sensor has been rotated
18481858
since it was put into this mode.
18491859
"""
18501860

1851-
self.mode = self.MODE_GYRO_ANG
1861+
if set_mode:
1862+
self.mode = self.MODE_GYRO_ANG
18521863

18531864
return self.value(0)
18541865

1855-
def rate(self):
1866+
def rate(self, set_mode=True):
18561867
"""
18571868
The rate at which the sensor is rotating, in degrees/second.
18581869
"""
18591870

1860-
self.mode = self.MODE_GYRO_RATE
1871+
if set_mode:
1872+
self.mode = self.MODE_GYRO_RATE
18611873

18621874
return self.value(0)
18631875

1864-
def rate_and_angle(self):
1876+
def rate_and_angle(self, set_mode=True):
18651877
"""
18661878
Angle (degrees) and Rotational Speed (degrees/second).
18671879
"""
18681880

1869-
self.mode = self.MODE_GYRO_G_A
1881+
if set_mode:
1882+
self.mode = self.MODE_GYRO_G_A
18701883

18711884
return self.value(0), self.value(1)
18721885

@@ -1899,13 +1912,14 @@ def __init__(self, address=None, name_pattern=SYSTEM_DEVICE_NAME_CONVENTION, nam
18991912
MODE_IR_CAL = 'IR-CAL'
19001913

19011914

1902-
def proximity(self):
1915+
def proximity(self, set_mode=True):
19031916
"""
19041917
A measurement of the distance between the sensor and the remote,
19051918
as a percentage. 100% is approximately 70cm/27in.
19061919
"""
19071920

1908-
self.mode = self.MODE_IR_PROX
1921+
if set_mode:
1922+
self.mode = self.MODE_IR_PROX
19091923

19101924
return self.value(0)
19111925

@@ -1929,23 +1943,25 @@ def __init__(self, address=None, name_pattern=SYSTEM_DEVICE_NAME_CONVENTION, nam
19291943
MODE_DBA = 'DBA'
19301944

19311945

1932-
def sound_pressure(self):
1946+
def sound_pressure(self, set_mode=True):
19331947
"""
19341948
A measurement of the measured sound pressure level, as a
19351949
percent. Uses a flat weighting.
19361950
"""
19371951

1938-
self.mode = self.MODE_DB
1952+
if set_mode:
1953+
self.mode = self.MODE_DB
19391954

19401955
return self.value(0)
19411956

1942-
def sound_pressure_low(self):
1957+
def sound_pressure_low(self, set_mode=True):
19431958
"""
19441959
A measurement of the measured sound pressure level, as a
19451960
percent. Uses A-weighting, which focuses on levels up to 55 dB.
19461961
"""
19471962

1948-
self.mode = self.MODE_DBA
1963+
if set_mode:
1964+
self.mode = self.MODE_DBA
19491965

19501966
return self.value(0)
19511967

@@ -1969,21 +1985,23 @@ def __init__(self, address=None, name_pattern=SYSTEM_DEVICE_NAME_CONVENTION, nam
19691985
MODE_AMBIENT = 'AMBIENT'
19701986

19711987

1972-
def reflected_light_intensity(self):
1988+
def reflected_light_intensity(self, set_mode=True):
19731989
"""
19741990
A measurement of the reflected light intensity, as a percentage.
19751991
"""
19761992

1977-
self.mode = self.MODE_REFLECT
1993+
if set_mode:
1994+
self.mode = self.MODE_REFLECT
19781995

19791996
return self.value(0)
19801997

1981-
def ambient_light_intensity(self):
1998+
def ambient_light_intensity(self, set_mode=True):
19821999
"""
19832000
A measurement of the ambient light intensity, as a percentage.
19842001
"""
19852002

1986-
self.mode = self.MODE_AMBIENT
2003+
if set_mode:
2004+
self.mode = self.MODE_AMBIENT
19872005

19882006
return self.value(0)
19892007

templates/special-sensors.liquid

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ endfor %}
5151
{% for mapping in currentClass.sensorValueMappings %}{%
5252
assign name = mapping.name | downcase | underscore_spaces %}{%
5353
assign mode = mapping.requiredMode | upcase | underscore_non_wc %}
54-
def {{ name }}(self):
54+
def {{ name }}(self, set_mode=True):
5555
"""{%
5656
for line in mapping.description %}{%
5757
if line %}
@@ -61,7 +61,8 @@ endfor %}
6161
endfor %}
6262
"""
6363

64-
self.mode = self.MODE_{{ mode }}
64+
if set_mode:
65+
self.mode = self.MODE_{{ mode }}
6566

6667
return {%
6768
for value_index in mapping.sourceValue

0 commit comments

Comments
 (0)