Skip to content

Commit d5e7792

Browse files
author
Charles Weir
committed
Added coroutine to TrialApp; changed TouchSensor to be True when
pressed.
1 parent 54450e3 commit d5e7792

4 files changed

Lines changed: 19 additions & 15 deletions

File tree

BrickPython/Sensor.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ def portNumFromId(portNumOrIdChar):
3535
result = portNumOrIdChar
3636
else:
3737
result = int(portNumOrIdChar) - 1
38-
assert( result in range(0,3))
38+
assert( result in range(0,4))
3939
return result
4040

4141
def __init__(self, port, type=RAW):

BrickPython/TouchSensor.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,19 @@ class TouchSensor(Sensor):
99
Parameter *port* may be either a value (BrickPi.PORT_1) or an integer '1'-'5'
1010
1111
Just using the BrickPi TYPE_SENSOR_TOUCH didn't work for me; hence this.
12+
13+
value() is True if the button is pressed; False otherwise.
1214
'''
1315
def __init__(self, port):
1416
Sensor.__init__(self, port, Sensor.RAW)
1517
#: Function that gets called with new value as parameter when the value changes - default, none.
1618
self.callbackFunction = lambda x: 0
19+
self.recentValue = True # default, 0, is pressed.
1720

1821
def updateValue(self, newValue):
1922
previousValue = self.recentValue
2023
Sensor.updateValue(self, newValue)
21-
self.recentValue = True if self.recentValue > 500 else False
24+
self.recentValue = False if self.recentValue > 500 else True
2225
if self.recentValue != previousValue:
2326
self.callbackFunction(self.recentValue)
2427

ExamplePrograms/TrialApp.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,25 +6,26 @@
66
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(sys.argv[0]))))
77

88
from BrickPython.TkApplication import TkApplication
9-
from BrickPython.Sensor import Sensor
9+
from BrickPython.TouchSensor import TouchSensor
1010
import logging
1111

1212
class App(TkApplication):
1313
'''Application to
1414
'''
1515

1616
def __init__(self):
17-
TkApplication.__init__(self, {'1': Sensor.ULTRASONIC_CONT })
17+
TkApplication.__init__(self, {'4': TouchSensor })
1818
self.doorLocked = False
1919
self.addSensorCoroutine( self.turnWhenDetected() )
2020
self.root.wm_title("Trial running")
2121
for c in "ABCD":
2222
self.motor(c).zeroPosition()
2323

2424
def turnWhenDetected(self):
25+
sensor = self.sensor('4')
2526
while True:
26-
for i in self.waitMilliseconds(500): yield
27-
print self.sensor('4').value()
27+
for i in sensor.waitForChange(): yield
28+
print sensor.value()
2829

2930

3031
## for c in "ABCD":

test/TestTouchSensor.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,29 +13,29 @@ def testTouchSensor(self):
1313
sensor = TouchSensor( '1' )
1414
self.assertEquals(sensor.port, 0)
1515
self.assertEquals( sensor.idChar, '1' )
16-
self.assertEquals( sensor.value(), False )
16+
self.assertEquals( sensor.value(), True ) # Pressed in
1717
sensor.updateValue( 1000 )
18-
self.assertEquals( sensor.value(), True )
18+
self.assertEquals( sensor.value(), False )
1919

2020
def testTextRepresentation(self):
21-
self.assertEquals( repr(TouchSensor( '1' ) ), 'TouchSensor 1: 0')
21+
self.assertEquals( repr(TouchSensor( '1' ) ), 'TouchSensor 1: True')
2222

2323
def testCallbackWhenChanged(self):
24-
result = [False]
24+
result = [True]
2525
def callbackFunc(x):
2626
result[0] = x
2727
sensor = TouchSensor( '1' )
2828
sensor.callbackFunction = callbackFunc
2929
sensor.updateValue( 1000 )
30-
self.assertEquals( result[0], True )
30+
self.assertEquals( result[0], False )
3131
# And no call when it doesn't change
32-
result[0] = False
32+
result[0] = True
3333
sensor.updateValue( 1000 )
34-
self.assertEquals( result[0], False )
34+
self.assertEquals( result[0], True )
3535
# But does get a call when it changes back
36-
result[0] = True
36+
result[0] = False
3737
sensor.updateValue( 20 )
38-
self.assertEquals( result[0], False )
38+
self.assertEquals( result[0], True )
3939

4040
def testCoroutineWaitingForChange(self):
4141
sensor = TouchSensor( '1' )

0 commit comments

Comments
 (0)