comparison service/arduinoNode/devices.py @ 1062:6ab7a933c2a8

button :press oneshot Ignore-this: 683ebd47640eb29f6af4da4b352e304f darcs-hash:a6ef95d08deccb78307cc06e642755be24ee0c3e
author drewp <drewp@bigasterisk.com>
date Mon, 21 Mar 2016 04:22:39 -0700
parents d2007482aec5
children 6103688dce6d
comparison
equal deleted inserted replaced
1061:ef635e9b9dce 1062:6ab7a933c2a8
226 226
227 @register 227 @register
228 class PushbuttonInput(DeviceType): 228 class PushbuttonInput(DeviceType):
229 """add a switch to ground; we'll turn on pullup""" 229 """add a switch to ground; we'll turn on pullup"""
230 deviceType = ROOM['Pushbutton'] 230 deviceType = ROOM['Pushbutton']
231 def __init__(self, graph, uri, pinNumber):
232 DeviceType.__init__(self, graph, uri, pinNumber)
233 self.lastClosed = None
234
231 def generateSetupCode(self): 235 def generateSetupCode(self):
232 return 'pinMode(%(pin)d, INPUT); digitalWrite(%(pin)d, HIGH);' % { 236 return 'pinMode(%(pin)d, INPUT); digitalWrite(%(pin)d, HIGH);' % {
233 'pin': self.pinNumber, 237 'pin': self.pinNumber,
234 } 238 }
235 239
241 245
242 def readFromPoll(self, read): 246 def readFromPoll(self, read):
243 b = read(1) 247 b = read(1)
244 if b not in '01': 248 if b not in '01':
245 raise ValueError('unexpected response %r' % b) 249 raise ValueError('unexpected response %r' % b)
246 motion = b == '1' 250 closed = b == '0'
247 251
248 #and exactly once for the transition 252 if self.lastClosed is not None and closed != self.lastClosed:
249 return [ 253 oneshot = [
254 (self.uri, ROOM['buttonState'],
255 ROOM['press'] if closed else ROOM['release']),
256 ]
257 else:
258 oneshot = []
259 self.lastClosed = closed
260
261 return {'latest': [
250 (self.uri, ROOM['buttonState'], 262 (self.uri, ROOM['buttonState'],
251 ROOM['pressed'] if motion else ROOM['notPressed']), 263 ROOM['pressed'] if closed else ROOM['notPressed']),
252 ] 264 ],
265 'oneshot': oneshot}
253 266
254 def watchPrefixes(self): 267 def watchPrefixes(self):
255 return [ 268 return [
256 (self.uri, ROOM['buttonState']), 269 (self.uri, ROOM['buttonState']),
257 ] 270 ]