forked from artfwo/pymonome
-
Notifications
You must be signed in to change notification settings - Fork 0
/
arc.py
59 lines (42 loc) · 1.48 KB
/
arc.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
#! /usr/bin/env python3
#
# Test for a push-button monome arc
import asyncio
import monome
class ExampleArcApp(monome.ArcApp):
def __init__(self):
super().__init__()
self.pos = [0, 0, 0, 0]
def on_arc_ready(self):
print('Ready, clearing all rings...')
for n in range(0, 4):
self.arc.ring_all(n, 0)
def on_arc_disconnect(self):
print('Arc disconnected.')
def on_arc_delta(self, ring, delta):
print(f'Ring: {ring} Delta: {delta}')
old_pos = self.pos[ring]
new_pos = old_pos + delta
if new_pos > old_pos:
self.arc.ring_range(ring, old_pos, new_pos, 15)
else:
self.arc.ring_range(ring, new_pos, old_pos, 5)
self.pos[ring] = new_pos
def on_arc_key(self, ring, s):
print(f'Ring: {ring} Pressed: {s > 0}')
self.arc.ring_all(ring, 15 if s > 0 else 0)
async def main():
loop = asyncio.get_running_loop()
app = ExampleArcApp()
def serialosc_device_added(id, type, port):
if 'arc' not in type:
print(f'ignoring {id} ({type}) as device does not appear to be an arc')
return
print(f'connecting to {id} ({type})')
asyncio.ensure_future(app.arc.connect('127.0.0.1', port))
serialosc = monome.SerialOsc()
serialosc.device_added_event.add_handler(serialosc_device_added)
await serialosc.connect()
await loop.create_future()
if __name__ == '__main__':
asyncio.run(main())