forked from amperka/cube
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdevice.py
111 lines (92 loc) · 2.95 KB
/
device.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# -*- coding: utf-8; -*-
import itertools
import platform
from time import sleep
from glob import glob
from pyfirmata import Arduino, OUTPUT
class CubeDevice(object):
green_pins = [6]
red_pins = [5]
orange_pins = [9, 10]
def __init__(self):
self.board = None
def discover(self):
if platform.system() == 'Windows':
return list(self._discover_windows())
elif platform.system() == 'Darwin':
return list(self._discover_posix(['/dev/tty.usbmodem*', '/dev/tty.usbserial*']))
else:
return list(self._discover_posix(['/dev/ttyACM*', '/dev/ttyUSB*']))
def _discover_windows(self):
import _winreg as winreg
path = r'HARDWARE\DEVICEMAP\SERIALCOMM'
try:
key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, path)
except WindowsError:
return
for i in itertools.count():
try:
val = winreg.EnumValue(key, i)
yield str(val[1])
except EnvironmentError:
break
def _discover_posix(self, patterns):
for p in patterns:
for match in glob(p):
yield match
def _write_pins(self, pins, value):
for p in pins:
self.board.digital[p].write(value)
def go_green(self):
self._write_pins(self.red_pins, 0)
self._write_pins(self.orange_pins, 0)
self._write_pins(self.green_pins, 1)
def go_red(self):
self._write_pins(self.green_pins, 0)
self._write_pins(self.orange_pins, 0)
self._write_pins(self.red_pins, 1)
def go_orange(self):
self._write_pins(self.green_pins, 0)
self._write_pins(self.red_pins, 0)
self._write_pins(self.orange_pins, 1)
def blink(self):
for i in xrange(5):
self.go_red()
sleep(0.1)
self.go_green()
sleep(0.1)
self.go_orange()
sleep(0.1)
def slow_blink(self):
"""Slow blink"""
for i in xrange(10):
self.go_red()
sleep(0.5)
self.go_green()
sleep(0.5)
self.go_orange()
sleep(0.5)
def blink_green(self):
"""Green blink"""
for i in xrange(5):
self.go_green()
sleep(0.1)
self._write_pins(self.green_pins, 0)
sleep(0.1)
def blink_red(self):
"""Green blink"""
for i in xrange(5):
self.go_red()
sleep(0.1)
self._write_pins(self.red_pins, 0)
sleep(0.1)
def connect(self, port):
self.board = Arduino(port)
for p in self.green_pins + self.red_pins + self.orange_pins:
self.board.digital[p].mode = OUTPUT
def disconnect(self):
if not self.board:
return
self._write_pins(self.red_pins, 0)
self._write_pins(self.green_pins, 0)
self._write_pins(self.orange_pins, 0)