Revision 150
Fixed several bugs:
warn state no longer allows red button to kill tool while it is spinning
keypresses are flushed by the server before a request so we don't get the one-swipe-behind bug
Changes:
red light stays on on toolboxes while powered
added more blink-error codes to the cardbox
trunk/cardbox/main.c | ||
---|---|---|
195 | 195 |
PORTC &= ~LED_RED; |
196 | 196 |
break; |
197 | 197 |
|
198 |
case TT_GET_KEY:
|
|
198 |
case TT_GET_KEY: //this means the states are messed up
|
|
199 | 199 |
PORTC &= (~LED_RED & ~LED_YELLOW & ~LED_GREEN); |
200 | 200 |
break; |
201 | 201 |
|
202 |
default: |
|
202 |
case 0: //timeout |
|
203 |
PORTC &= (~LED_RED & ~LED_YELLOW); |
|
204 |
break; |
|
205 |
|
|
206 |
default: //bad packet |
|
203 | 207 |
PORTC &= (~LED_RED & ~LED_GREEN); |
204 | 208 |
break; |
205 | 209 |
} |
trunk/toolbox/main.c | ||
---|---|---|
40 | 40 |
#define OFF 0x00 |
41 | 41 |
|
42 | 42 |
/***** change ADDR ****/ |
43 |
#define ADDR 14
|
|
43 |
#define ADDR 18
|
|
44 | 44 |
#define DELIM '^' |
45 | 45 |
#define SERVER 1 |
46 | 46 |
#define TURNON 'O' |
... | ... | |
163 | 163 |
|
164 | 164 |
switch (state) { |
165 | 165 |
case sd: |
166 |
toggle_led(LED_RED, OFF);
|
|
166 |
toggle_led(LED_RED, ON);
|
|
167 | 167 |
toggle_led(LED_YELLOW, OFF); |
168 | 168 |
toggle_led(LED_GREEN, OFF); |
169 | 169 |
toggle_relay(OFF); |
... | ... | |
308 | 308 |
toggle_led(LED_YELLOW, OFF); |
309 | 309 |
} |
310 | 310 |
|
311 |
if (read_button(BUT_RED)) { |
|
311 |
if (read_button(BUT_RED) && read_vac() == OFF) {
|
|
312 | 312 |
toggle_relay(OFF); |
313 | 313 |
state = off; |
314 | 314 |
} else if (read_button(BUT_BLACK)) { |
... | ... | |
329 | 329 |
toggle_led(LED_GREEN, OFF); |
330 | 330 |
toggle_led(LED_YELLOW, OFF); |
331 | 331 |
toggle_led(LED_RED, ON); |
332 |
_delay_ms(2000); |
|
333 |
toggle_led(LED_RED, OFF); |
|
334 | 332 |
state = sd; |
335 | 333 |
break; |
336 | 334 |
default: state = sd; |
trunk/swipe/tooltron.py | ||
---|---|---|
50 | 50 |
#this table maps which keypad button to press for each tool. This |
51 | 51 |
#list should probably be printed next to the swipe box |
52 | 52 |
tools = { |
53 |
'Bandsaw':['2','8'],
|
|
54 |
'DrillPress':['1','9'],
|
|
53 |
'Bandsaw':[], |
|
54 |
'DrillPress':['3','8'],
|
|
55 | 55 |
'Mill':['4'], |
56 |
'Lathe':['5'],
|
|
56 |
'Lathe':[], |
|
57 | 57 |
#HACK: since the saw isn't used I use it for testing random boards |
58 |
'ChopMiterSaw':['3','7','0']
|
|
58 |
'ChopMiterSaw':['1','2','5','6','7','9']
|
|
59 | 59 |
} |
60 | 60 |
|
61 | 61 |
#this table maps keypad button numbers to tool IDs. The default is |
... | ... | |
264 | 264 |
|
265 | 265 |
|
266 | 266 |
print "sending key request" |
267 |
keypad.flushInput() |
|
267 | 268 |
keypad.write(TT_GET_KEY) |
268 | 269 |
|
269 | 270 |
cursor.execute(qry + id.group(1)) |
... | ... | |
333 | 334 |
break |
334 | 335 |
|
335 | 336 |
#if we have a vaid response |
336 |
if resp != "" and resp != TT_TIMEOUT: |
|
337 |
#sometimes the FTDI chip seems to give a zero as a string when power is reset |
|
338 |
if resp != "" and ord(resp) != 0 and resp != TT_TIMEOUT: |
|
337 | 339 |
|
338 | 340 |
toolName = reverseTool(resp) |
339 |
toolNameLong = toolName + " (k="+str(resp)+", t="+str(keypad2toolID(resp))+")" |
|
340 |
print "request:",resp,toolNameLong |
|
341 |
toolNameLong = toolName + " (k="+str(resp)+"("+str(ord(resp))+"), t="+str(keypad2toolID(resp))+")"
|
|
342 |
print "request:",resp,"(",ord(resp),") ",toolNameLong
|
|
341 | 343 |
|
342 | 344 |
if acl.count(resp) > 0: |
343 | 345 |
keypad.write(TT_ACK) |
... | ... | |
364 | 366 |
|
365 | 367 |
clear_id() |
366 | 368 |
|
369 |
elif resp == 0 or ord(resp) == 0: #if we get noise, send timeout to reset and sync states |
|
370 |
keypad.write(TT_TIMEOUT); |
|
371 |
print "ERROR: got strange byte, timing out" |
|
372 |
logMessage("ERROR: got 0 as a byte, sending timeout (cardbox power issue?)") |
|
367 | 373 |
else: |
368 | 374 |
break |
Also available in: Unified diff