This repository has been archived by the owner on Jul 3, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathDrillProcess.py
124 lines (96 loc) · 4.61 KB
/
DrillProcess.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
112
113
114
115
116
from robocluster import Device
import config
log = config.getLogger()
#CONSTANTS
DRILL_RAISE_DUTY_CYCLE = 1e5 # at 12 volts
DRILL_LOWER_DUTY_CYCLE = 5e4 # at 12 volts
ROTATION_SPEED = 4e3 # at 12 volts
DEADZONE = 0.2 #joysticks arent perfect
TRIG_DEADZONE = 0.05
controller_num = config.drill_controller
#INITIALIZTION
DrillDevice = Device('DrillDevice', 'rover', network=config.network)
DrillDevice.storage.top_motor_movement = 'stopped'
DrillDevice.storage.bottom_motor_movement = 'stopped'
DrillDevice.storage.rotation_direction = 'stopped'
DrillDevice.storage.top_lower_switch = 0
DrillDevice.storage.top_raise_switch = 0
DrillDevice.storage.bottom_raise_switch = 0
DrillDevice.storage.bottom_lower_switch = 0
@DrillDevice.on('*/controller{}/joystick1'.format(controller_num))
async def set_top_movement(joystick1, data):
axis = data[1]
if axis is None:
return
else:
duty_cycle = axis * DRILL_RAISE_DUTY_CYCLE
if -DEADZONE < axis < DEADZONE:
DrillDevice.storage.top_motor_movement = 'stopped'
await DrillDevice.publish('DrillTop', {'SetDutyCycle': int(0)})
else:
#limit switches triggered to prevent user from damaging motors
#theres two for each stage (top and bottom) of the motor
if (DrillDevice.storage.top_raise_switch == 1 and duty_cycle > 0) or \
(DrillDevice.storage.top_lower_switch == 1 and duty_cycle < 0):
DrillDevice.storage.top_motor_movement = 'stopped'
await DrillDevice.publish('DrillTop', {'SetDutyCycle': int(0)})
else:
DrillDevice.storage.top_motor_movement = 'moving'
await DrillDevice.publish('DrillTop', {'SetDutyCycle': int(duty_cycle)})
log.debug('setting top movement to {}'.format(DrillDevice.storage.top_motor_movement))
@DrillDevice.on('*/controller{}/joystick2'.format(controller_num))
async def set_bottom_movement(joystick2, data):
axis = data[1]
if axis is None:
return
else:
duty_cycle = axis * DRILL_LOWER_DUTY_CYCLE
if -DEADZONE < axis < DEADZONE:
DrillDevice.storage.bottom_motor_movement = 'stopped'
await DrillDevice.publish('DrillSpin', {'SetDutyCycle': int(0)})
else:
# limit switch check
if (DrillDevice.storage.bottom_raise_switch == 1 and duty_cycle > 0) or \
(DrillDevice.storage.bottom_lower_switch == 1 and duty_cycle < 0):
DrillDevice.storage.top_motor_movement = 'stopped'
await DrillDevice.publish('DrillSpin', {'SetDutyCycle': int(0)})
else:
DrillDevice.storage.top_motor_movement = 'moving'
await DrillDevice.publish('DrillSpin', {'SetDutyCycle': int(duty_cycle)})
log.debug('setting bottom movement to {}'.format(DrillDevice.storage.bottom_motor_movement))
@DrillDevice.on('*/controller{}/trigger'.format(controller_num))
async def set_drill_rotation(trigger, data):
axis = data
if axis is None:
return
else:
duty_cycle = axis * ROTATION_SPEED
if -TRIG_DEADZONE < axis < TRIG_DEADZONE:
DrillDevice.storage.rotation_direction = 'stopped'
await DrillDevice.publish('DrillBottom', {'SetRPM': int(0)})
else:
DrillDevice.storage.rotation_direction = 'moving'
await DrillDevice.publish('DrillBottom', {'SetRPM': int(duty_cycle)})
log.debug('Setting rotation movement to {}'.format(DrillDevice.storage.rotation_direction))
@DrillDevice.on('controller{}/{}_down'.format(controller_num, 'buttonB'))
async def hard_stop():
await DrillDevice.publish('DrillTop', {'SetDutyCycle': int(0)})
await DrillDevice.publish('DrillBottom', {'SetDutyCycle': int(0)})
await DrillDevice.publish('DrillSpin', {'SetRPM': int(0)})
DrillDevice.storage.top_motor_movement = 'stopped'
DrillDevice.storage.bottom_motor_movement = 'stopped'
DrillDevice.storage.rotation_direction = 'stopped'
log.debug('setting top movement to {}'.format(DrillDevice.storage.top_motor_movement))
log.debug('setting bottom movement to {}'.format(DrillDevice.storage.bottom_motor_movement))
log.debug('Setting rotation movement to {}'.format(DrillDevice.storage.rotation_direction))
@DrillDevice.on('*/science_limit_switches')
async def switches(event, data):
# log.debug('Updating limit switches {}'.format(data))
DrillDevice.storage.top_raise_switch = data[1]
DrillDevice.storage.top_lower_switch = data[4]
DrillDevice.storage.bottom_raise_switch = data[0]
DrillDevice.storage.bottom_lower_switch = data[3]
DrillDevice.storage.sample_switch = data[2]
DrillDevice.storage.empty_switch = data[5]
DrillDevice.start()
DrillDevice.wait()