Skip to content

Commit ea66472

Browse files
authored
[breaking] Special properties (#229)
* Special sensor properties are really properties now See #228
1 parent f306f3f commit ea66472

File tree

6 files changed

+73
-48
lines changed

6 files changed

+73
-48
lines changed

demo/EV3RSTORM/ev3rstorm.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ def on_press(state):
146146

147147
# Now that the event handlers are assigned,
148148
# lets enter the processing loop:
149-
while not self.ts.is_pressed():
149+
while not self.ts.is_pressed:
150150
rc1.process()
151151
rc2.process()
152152
time.sleep(0.1)

demo/EXPLOR3R/auto-drive.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,6 @@
4848
ir = InfraredSensor(); assert ir.connected
4949
ts = TouchSensor(); assert ts.connected
5050

51-
# Put the infrared sensor into proximity mode.
52-
ir.mode = 'IR-PROX'
53-
5451
# We will need to check EV3 buttons state.
5552
btn = Button()
5653

@@ -112,7 +109,7 @@ def turn():
112109
start()
113110
while not btn.any():
114111

115-
if ts.value():
112+
if ts.is_pressed:
116113
# We bumped an obstacle.
117114
# Back away, turn and go in other direction.
118115
backup()
@@ -121,7 +118,7 @@ def turn():
121118

122119
# Infrared sensor in proximity mode will measure distance to the closest
123120
# object in front of it.
124-
distance = ir.value()
121+
distance = ir.proximity
125122

126123
if distance > 60:
127124
# Path is clear, run at full speed.

demo/EXPLOR3R/remote-control.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ def on_press(state):
8383
rc.process()
8484

8585
# Backup when bumped an obstacle
86-
if ts.value():
86+
if ts.is_pressed:
8787
Sound.speak('Oops, excuse me!')
8888

8989
for motor in (lmotor, rmotor):

demo/R3PTAR/r3ptar.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ def hand_biter(done):
3131

3232
while not done.is_set():
3333
# Wait until something (a hand?!) gets too close:
34-
while s.proximity() > 30:
34+
while s.proximity > 30:
3535
if done.is_set(): return
3636
time.sleep(0.1)
3737

ev3dev/core.py

Lines changed: 64 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1630,19 +1630,21 @@ class TouchSensor(Sensor):
16301630

16311631
def __init__(self, address=None, name_pattern=SYSTEM_DEVICE_NAME_CONVENTION, name_exact=False, **kwargs):
16321632
super(TouchSensor, self).__init__(address, name_pattern, name_exact, driver_name=['lego-ev3-touch', 'lego-nxt-touch'], **kwargs)
1633+
self.auto_mode = True
16331634

16341635

16351636
# Button state
16361637
MODE_TOUCH = 'TOUCH'
16371638

16381639

1639-
def is_pressed(self, set_mode=True):
1640+
@property
1641+
def is_pressed(self):
16401642
"""
16411643
A boolean indicating whether the current touch sensor is being
16421644
pressed.
16431645
"""
16441646

1645-
if set_mode:
1647+
if self.auto_mode:
16461648
self.mode = self.MODE_TOUCH
16471649

16481650
return self.value(0)
@@ -1658,6 +1660,7 @@ class ColorSensor(Sensor):
16581660

16591661
def __init__(self, address=None, name_pattern=SYSTEM_DEVICE_NAME_CONVENTION, name_exact=False, **kwargs):
16601662
super(ColorSensor, self).__init__(address, name_pattern, name_exact, driver_name=['lego-ev3-color'], **kwargs)
1663+
self.auto_mode = True
16611664

16621665

16631666
# Reflected light. Red LED on.
@@ -1676,27 +1679,30 @@ def __init__(self, address=None, name_pattern=SYSTEM_DEVICE_NAME_CONVENTION, nam
16761679
MODE_RGB_RAW = 'RGB-RAW'
16771680

16781681

1679-
def reflected_light_intensity(self, set_mode=True):
1682+
@property
1683+
def reflected_light_intensity(self):
16801684
"""
16811685
Reflected light intensity as a percentage. Light on sensor is red.
16821686
"""
16831687

1684-
if set_mode:
1688+
if self.auto_mode:
16851689
self.mode = self.MODE_COL_REFLECT
16861690

16871691
return self.value(0)
16881692

1689-
def ambient_light_intensity(self, set_mode=True):
1693+
@property
1694+
def ambient_light_intensity(self):
16901695
"""
16911696
Ambient light intensity. Light on sensor is dimly lit blue.
16921697
"""
16931698

1694-
if set_mode:
1699+
if self.auto_mode:
16951700
self.mode = self.MODE_COL_AMBIENT
16961701

16971702
return self.value(0)
16981703

1699-
def color(self, set_mode=True):
1704+
@property
1705+
def color(self):
17001706
"""
17011707
Color detected by the sensor, categorized by overall value.
17021708
- 0: No color
@@ -1709,47 +1715,51 @@ def color(self, set_mode=True):
17091715
- 7: Brown
17101716
"""
17111717

1712-
if set_mode:
1718+
if self.auto_mode:
17131719
self.mode = self.MODE_COL_COLOR
17141720

17151721
return self.value(0)
17161722

1717-
def raw(self, set_mode=True):
1723+
@property
1724+
def raw(self):
17181725
"""
17191726
Red, green, and blue components of the detected color, in the range 0-1020.
17201727
"""
17211728

1722-
if set_mode:
1729+
if self.auto_mode:
17231730
self.mode = self.MODE_RGB_RAW
17241731

17251732
return self.value(0), self.value(1), self.value(2)
17261733

1727-
def red(self, set_mode=True):
1734+
@property
1735+
def red(self):
17281736
"""
17291737
Red component of the detected color, in the range 0-1020.
17301738
"""
17311739

1732-
if set_mode:
1740+
if self.auto_mode:
17331741
self.mode = self.MODE_RGB_RAW
17341742

17351743
return self.value(0)
17361744

1737-
def green(self, set_mode=True):
1745+
@property
1746+
def green(self):
17381747
"""
17391748
Green component of the detected color, in the range 0-1020.
17401749
"""
17411750

1742-
if set_mode:
1751+
if self.auto_mode:
17431752
self.mode = self.MODE_RGB_RAW
17441753

17451754
return self.value(1)
17461755

1747-
def blue(self, set_mode=True):
1756+
@property
1757+
def blue(self):
17481758
"""
17491759
Blue component of the detected color, in the range 0-1020.
17501760
"""
17511761

1752-
if set_mode:
1762+
if self.auto_mode:
17531763
self.mode = self.MODE_RGB_RAW
17541764

17551765
return self.value(2)
@@ -1765,6 +1775,7 @@ class UltrasonicSensor(Sensor):
17651775

17661776
def __init__(self, address=None, name_pattern=SYSTEM_DEVICE_NAME_CONVENTION, name_exact=False, **kwargs):
17671777
super(UltrasonicSensor, self).__init__(address, name_pattern, name_exact, driver_name=['lego-ev3-us', 'lego-nxt-us'], **kwargs)
1778+
self.auto_mode = True
17681779

17691780

17701781
# Continuous measurement in centimeters.
@@ -1783,35 +1794,38 @@ def __init__(self, address=None, name_pattern=SYSTEM_DEVICE_NAME_CONVENTION, nam
17831794
MODE_US_SI_IN = 'US-SI-IN'
17841795

17851796

1786-
def distance_centimeters(self, set_mode=True):
1797+
@property
1798+
def distance_centimeters(self):
17871799
"""
17881800
Measurement of the distance detected by the sensor,
17891801
in centimeters.
17901802
"""
17911803

1792-
if set_mode:
1804+
if self.auto_mode:
17931805
self.mode = self.MODE_US_DIST_CM
17941806

17951807
return self.value(0)
17961808

1797-
def distance_inches(self, set_mode=True):
1809+
@property
1810+
def distance_inches(self):
17981811
"""
17991812
Measurement of the distance detected by the sensor,
18001813
in inches.
18011814
"""
18021815

1803-
if set_mode:
1816+
if self.auto_mode:
18041817
self.mode = self.MODE_US_DIST_IN
18051818

18061819
return self.value(0)
18071820

1808-
def other_sensor_present(self, set_mode=True):
1821+
@property
1822+
def other_sensor_present(self):
18091823
"""
18101824
Value indicating whether another ultrasonic sensor could
18111825
be heard nearby.
18121826
"""
18131827

1814-
if set_mode:
1828+
if self.auto_mode:
18151829
self.mode = self.MODE_US_LISTEN
18161830

18171831
return self.value(0)
@@ -1827,6 +1841,7 @@ class GyroSensor(Sensor):
18271841

18281842
def __init__(self, address=None, name_pattern=SYSTEM_DEVICE_NAME_CONVENTION, name_exact=False, **kwargs):
18291843
super(GyroSensor, self).__init__(address, name_pattern, name_exact, driver_name=['lego-ev3-gyro'], **kwargs)
1844+
self.auto_mode = True
18301845

18311846

18321847
# Angle
@@ -1845,33 +1860,36 @@ def __init__(self, address=None, name_pattern=SYSTEM_DEVICE_NAME_CONVENTION, nam
18451860
MODE_GYRO_CAL = 'GYRO-CAL'
18461861

18471862

1848-
def angle(self, set_mode=True):
1863+
@property
1864+
def angle(self):
18491865
"""
18501866
The number of degrees that the sensor has been rotated
18511867
since it was put into this mode.
18521868
"""
18531869

1854-
if set_mode:
1870+
if self.auto_mode:
18551871
self.mode = self.MODE_GYRO_ANG
18561872

18571873
return self.value(0)
18581874

1859-
def rate(self, set_mode=True):
1875+
@property
1876+
def rate(self):
18601877
"""
18611878
The rate at which the sensor is rotating, in degrees/second.
18621879
"""
18631880

1864-
if set_mode:
1881+
if self.auto_mode:
18651882
self.mode = self.MODE_GYRO_RATE
18661883

18671884
return self.value(0)
18681885

1869-
def rate_and_angle(self, set_mode=True):
1886+
@property
1887+
def rate_and_angle(self):
18701888
"""
18711889
Angle (degrees) and Rotational Speed (degrees/second).
18721890
"""
18731891

1874-
if set_mode:
1892+
if self.auto_mode:
18751893
self.mode = self.MODE_GYRO_G_A
18761894

18771895
return self.value(0), self.value(1)
@@ -1887,6 +1905,7 @@ class InfraredSensor(Sensor):
18871905

18881906
def __init__(self, address=None, name_pattern=SYSTEM_DEVICE_NAME_CONVENTION, name_exact=False, **kwargs):
18891907
super(InfraredSensor, self).__init__(address, name_pattern, name_exact, driver_name=['lego-ev3-ir'], **kwargs)
1908+
self.auto_mode = True
18901909

18911910

18921911
# Proximity
@@ -1905,13 +1924,14 @@ def __init__(self, address=None, name_pattern=SYSTEM_DEVICE_NAME_CONVENTION, nam
19051924
MODE_IR_CAL = 'IR-CAL'
19061925

19071926

1908-
def proximity(self, set_mode=True):
1927+
@property
1928+
def proximity(self):
19091929
"""
19101930
A measurement of the distance between the sensor and the remote,
19111931
as a percentage. 100% is approximately 70cm/27in.
19121932
"""
19131933

1914-
if set_mode:
1934+
if self.auto_mode:
19151935
self.mode = self.MODE_IR_PROX
19161936

19171937
return self.value(0)
@@ -1927,6 +1947,7 @@ class SoundSensor(Sensor):
19271947

19281948
def __init__(self, address=None, name_pattern=SYSTEM_DEVICE_NAME_CONVENTION, name_exact=False, **kwargs):
19291949
super(SoundSensor, self).__init__(address, name_pattern, name_exact, driver_name=['lego-nxt-sound'], **kwargs)
1950+
self.auto_mode = True
19301951

19311952

19321953
# Sound pressure level. Flat weighting
@@ -1936,24 +1957,26 @@ def __init__(self, address=None, name_pattern=SYSTEM_DEVICE_NAME_CONVENTION, nam
19361957
MODE_DBA = 'DBA'
19371958

19381959

1939-
def sound_pressure(self, set_mode=True):
1960+
@property
1961+
def sound_pressure(self):
19401962
"""
19411963
A measurement of the measured sound pressure level, as a
19421964
percent. Uses a flat weighting.
19431965
"""
19441966

1945-
if set_mode:
1967+
if self.auto_mode:
19461968
self.mode = self.MODE_DB
19471969

19481970
return self.value(0)
19491971

1950-
def sound_pressure_low(self, set_mode=True):
1972+
@property
1973+
def sound_pressure_low(self):
19511974
"""
19521975
A measurement of the measured sound pressure level, as a
19531976
percent. Uses A-weighting, which focuses on levels up to 55 dB.
19541977
"""
19551978

1956-
if set_mode:
1979+
if self.auto_mode:
19571980
self.mode = self.MODE_DBA
19581981

19591982
return self.value(0)
@@ -1969,6 +1992,7 @@ class LightSensor(Sensor):
19691992

19701993
def __init__(self, address=None, name_pattern=SYSTEM_DEVICE_NAME_CONVENTION, name_exact=False, **kwargs):
19711994
super(LightSensor, self).__init__(address, name_pattern, name_exact, driver_name=['lego-nxt-light'], **kwargs)
1995+
self.auto_mode = True
19721996

19731997

19741998
# Reflected light. LED on
@@ -1978,22 +2002,24 @@ def __init__(self, address=None, name_pattern=SYSTEM_DEVICE_NAME_CONVENTION, nam
19782002
MODE_AMBIENT = 'AMBIENT'
19792003

19802004

1981-
def reflected_light_intensity(self, set_mode=True):
2005+
@property
2006+
def reflected_light_intensity(self):
19822007
"""
19832008
A measurement of the reflected light intensity, as a percentage.
19842009
"""
19852010

1986-
if set_mode:
2011+
if self.auto_mode:
19872012
self.mode = self.MODE_REFLECT
19882013

19892014
return self.value(0)
19902015

1991-
def ambient_light_intensity(self, set_mode=True):
2016+
@property
2017+
def ambient_light_intensity(self):
19922018
"""
19932019
A measurement of the ambient light intensity, as a percentage.
19942020
"""
19952021

1996-
if set_mode:
2022+
if self.auto_mode:
19972023
self.mode = self.MODE_AMBIENT
19982024

19992025
return self.value(0)

0 commit comments

Comments
 (0)