-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathx9c.py
53 lines (40 loc) · 1.58 KB
/
x9c.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
import digitalio, time
from microcontroller import Pin
class X9C:
def __init__(self, cs: Pin = None, inc: Pin = None, ud: Pin = None) -> None:
self._cs = digitalio.DigitalInOut(cs) # chip select
self._inc = digitalio.DigitalInOut(inc) # increase
self._ud = digitalio.DigitalInOut(ud) # up or down
self._cs.direction = digitalio.Direction.OUTPUT
self._inc.direction = digitalio.Direction.OUTPUT
self._ud.direction = digitalio.Direction.OUTPUT
self.max_step = 99
self.min_pot()
def wiper_save(self) -> None:
# chip select, stand by
self._cs.value = True
def _move_wiper(self, steps: int, direction: bool) -> None:
# set u/d direction
self._ud.value = direction
# time.sleep(0.003)
self._cs.value = False
# u/d direction means wiper up or down
cnt = self.max_step if steps > self.max_step else steps
# toggle pin inc to move the wiper
for _ in range(cnt):
self._inc.value = True
time.sleep(0.001)
self._inc.value = False
time.sleep(0.001)
self._inc.value = True
def max_pot(self) -> None:
self._move_wiper(self.max_step + 1, True)
def min_pot(self) -> None:
self._move_wiper(self.max_step + 1, False)
def wiper_up(self, steps: int) -> None:
self._move_wiper(steps, True)
def wiper_down(self, steps: int) -> None:
self._move_wiper(steps, False)
def wiper_to(self, steps: int) -> None:
self.min_pot()
self._move_wiper(steps, True)