Mercurial > code > home > repos > homeauto
comparison service/arduinoNode/arduinoNode.py @ 185:2161c71c7b02
support for device code in the idle loop
Ignore-this: 7454ba4c9bab3c5393707af7ac91547
author | drewp@bigasterisk.com |
---|---|
date | Wed, 08 Jul 2015 01:19:21 -0700 |
parents | f81c4d3d774b |
children | ad20e5cb4feb |
comparison
equal
deleted
inserted
replaced
184:e052416a2290 | 185:2161c71c7b02 |
---|---|
67 self._devs = devices.makeDevices(graph, self.uri) | 67 self._devs = devices.makeDevices(graph, self.uri) |
68 self._devCommandNum = dict((dev.uri, ACTION_BASE + devIndex) | 68 self._devCommandNum = dict((dev.uri, ACTION_BASE + devIndex) |
69 for devIndex, dev in enumerate(self._devs)) | 69 for devIndex, dev in enumerate(self._devs)) |
70 self._polledDevs = [d for d in self._devs if d.generatePollCode()] | 70 self._polledDevs = [d for d in self._devs if d.generatePollCode()] |
71 | 71 |
72 self._statementsFromInputs = {} # input uri: latest statements | 72 self._statementsFromInputs = {} # input device uri: latest statements |
73 | 73 |
74 self.open() | 74 self.open() |
75 | 75 |
76 def description(self): | 76 def description(self): |
77 """for web page""" | 77 """for web page""" |
156 'baudrate': self.baudrate, | 156 'baudrate': self.baudrate, |
157 'includes': '', | 157 'includes': '', |
158 'global': '', | 158 'global': '', |
159 'setups': '', | 159 'setups': '', |
160 'polls': '', | 160 'polls': '', |
161 'idles': '', | |
161 'actions': '', | 162 'actions': '', |
162 } | 163 } |
163 for attr in ['includes', 'global', 'setups', 'polls', 'actions']: | 164 for attr in ['includes', 'global', 'setups', 'polls', 'idles', |
165 'actions']: | |
164 for dev in self._devs: | 166 for dev in self._devs: |
165 if attr == 'includes': | 167 if attr == 'includes': |
166 gen = '\n'.join('#include "%s"\n' % inc | 168 gen = '\n'.join('#include "%s"\n' % inc |
167 for inc in dev.generateIncludes()) | 169 for inc in dev.generateIncludes()) |
168 elif attr == 'global': gen = dev.generateGlobalCode() | 170 elif attr == 'global': gen = dev.generateGlobalCode() |
169 elif attr == 'setups': gen = dev.generateSetupCode() | 171 elif attr == 'setups': gen = dev.generateSetupCode() |
170 elif attr == 'polls': gen = dev.generatePollCode() | 172 elif attr == 'polls': gen = dev.generatePollCode() |
173 elif attr == 'idles': gen = dev.generateIdleCode() | |
171 elif attr == 'actions': | 174 elif attr == 'actions': |
172 code = dev.generateActionCode() | 175 code = dev.generateActionCode() |
173 if code: | 176 if code: |
174 gen = '''else if (cmd == %(cmdNum)s) { | 177 gen = '''else if (cmd == %(cmdNum)s) { |
175 %(code)s | 178 %(code)s |
187 | 190 |
188 code = ''' | 191 code = ''' |
189 %(includes)s | 192 %(includes)s |
190 | 193 |
191 %(global)s | 194 %(global)s |
192 | 195 byte frame=0; |
196 unsigned long lastFrame=0; | |
197 | |
193 void setup() { | 198 void setup() { |
194 Serial.begin(%(baudrate)d); | 199 Serial.begin(%(baudrate)d); |
195 Serial.flush(); | 200 Serial.flush(); |
196 %(setups)s | 201 %(setups)s |
197 } | 202 } |
198 | 203 |
204 void idle() { | |
205 // this slowdown is to spend somewhat less time PWMing, to reduce | |
206 // leaking from on channels to off ones (my shift register has no | |
207 // latching) | |
208 if (micros() < lastFrame + 128) { | |
209 return; | |
210 } | |
211 lastFrame = micros(); | |
212 frame++; | |
213 %(idles)s | |
214 } | |
215 | |
199 void loop() { | 216 void loop() { |
200 byte head, cmd; | 217 byte head, cmd; |
218 idle(); | |
201 if (Serial.available() >= 2) { | 219 if (Serial.available() >= 2) { |
202 head = Serial.read(); | 220 head = Serial.read(); |
203 if (head != 0x60) { | 221 if (head != 0x60) { |
204 Serial.flush(); | 222 Serial.flush(); |
205 return; | 223 return; |
342 pred = URIRef(self.get_argument('p')) | 360 pred = URIRef(self.get_argument('p')) |
343 | 361 |
344 turtleLiteral = self.request.body | 362 turtleLiteral = self.request.body |
345 try: | 363 try: |
346 obj = Literal(float(turtleLiteral)) | 364 obj = Literal(float(turtleLiteral)) |
347 except TypeError: | 365 except ValueError: |
348 obj = Literal(turtleLiteral) | 366 obj = Literal(turtleLiteral) |
349 | 367 |
350 stmt = (subj, pred, obj) | 368 stmt = (subj, pred, obj) |
351 for b in self.settings.boards: | 369 for b in self.settings.boards: |
352 b.outputStatements([stmt]) | 370 b.outputStatements([stmt]) |