-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrecieve_inputs.py
85 lines (67 loc) · 2.46 KB
/
recieve_inputs.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
from MotorController import MCInterface
import threading
import curses
import time
CONST_VELOCITY = 50
class Inputs(threading.Thread):
def __init__(self, threadID, med_dist_queue, lat_dist_queue, logger):
self.med_dist_queue = med_dist_queue
self.lat_dist_queue = lat_dist_queue
threading.Thread.__init__(self)
# self.establish_connection()
self.mc = MCInterface()
self.logger = logger
self.threadID = threadID
# get the curses screen window
self.screen = curses.initscr()
# turn off input echoing
curses.noecho()
# respond to keys immediately (don't wait for enter)
curses.cbreak()
# map arrow keys to special values
self.screen.keypad(True)
def get_data(self):
char = self.screen.getch()
return char
def turn_left(self, CONST_VELOCITY):
self.mc.forwardM0(CONST_VELOCITY)
self.mc.forwardM0(CONST_VELOCITY)
def turn_right(self, CONST_VELOCITY):
self.mc.reverseM1(CONST_VELOCITY)
self.mc.reverseM1(CONST_VELOCITY)
def forward(self, CONST_VELOCITY):
self.mc.forwardM0(CONST_VELOCITY)
self.mc.reverseM1(CONST_VELOCITY)
def reverse(self, CONST_VELOCITY):
normVel = abs(int(2*CONST_VELOCITY))
self.mc.reverseM0(normVel)
self.mc.forwardM1(normVel)
def establish_connection(self):
pass
# Runs on inputs.start()
def run(self):
try:
while True:
char = self.get_data()
self.logger.info("Received: " + str(char))
if char == ord('q'):
break
elif char == curses.KEY_RIGHT:
# print doesn't work with curses, use addstr instead
self.screen.addstr(0, 0, 'right')
self.lat_dist_queue.put(50)
elif char == curses.KEY_LEFT:
self.screen.addstr(0, 0, 'left ')
self.lat_dist_queue.put(-50)
elif char == curses.KEY_UP:
self.screen.addstr(0, 0, 'up ')
self.med_dist_queue.put(50)
elif char == curses.KEY_DOWN:
self.screen.addstr(0, 0, 'down ')
self.med_dist_queue.put(-50)
finally:
# shut down cleanly
curses.nocbreak()
self.screen.keypad(0)
curses.echo()
curses.endwin()