-
Notifications
You must be signed in to change notification settings - Fork 35
/
Copy pathKickstand.java
89 lines (74 loc) · 2.42 KB
/
Kickstand.java
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
package com.team254.frc2019.subsystems;
import com.team254.frc2019.Constants;
import edu.wpi.first.wpilibj.DoubleSolenoid;
/**
* Deploys and retracts the climbing mechanism, through the kickstand solenoid,
* and the rachet system, which makes sure the robot does not fall down while
* climbing
*/
public class Kickstand extends Subsystem {
private final DoubleSolenoid.Value kSolenoidForKickstandEngaged = DoubleSolenoid.Value.kForward;
private final DoubleSolenoid.Value kSolenoidForKickstandDisengaged = DoubleSolenoid.Value.kReverse;
private static Kickstand mInstance;
private DoubleSolenoid mKickstandSolenoid;
private DoubleSolenoid mRachetSolenoid;
private boolean mEngaged;
private boolean mRachetEngaged;
public synchronized static Kickstand getInstance() {
if (mInstance == null) {
mInstance = new Kickstand();
}
return mInstance;
}
private Kickstand() {
mKickstandSolenoid = new DoubleSolenoid(Constants.kPCMId, Constants.kKickstandForwardId,
Constants.kKickstandReverseId);
mRachetSolenoid = new DoubleSolenoid(Constants.kPCMId, Constants.kRatchetForwardId,
Constants.kRatchetReverseId);
mEngaged = true;
mRachetEngaged = true;
setDisengaged();
setRachetDisengaged();
}
public synchronized void setRachetEngaged() {
if (!mRachetEngaged) {
mRachetEngaged = true;
mRachetSolenoid.set(kSolenoidForKickstandEngaged);
}
}
public synchronized void setRachetDisengaged() {
if (mRachetEngaged) {
mRachetEngaged = false;
mRachetSolenoid.set(kSolenoidForKickstandDisengaged);
}
}
/**
* Deploys the climbing mechanism
*/
public synchronized void setEngaged() {
if (!mEngaged) {
mEngaged = true;
mKickstandSolenoid.set(kSolenoidForKickstandEngaged);
}
}
/**
* Retracts the climbing mechanism
*/
public synchronized void setDisengaged() {
if (mEngaged) {
mEngaged = false;
mKickstandSolenoid.set(kSolenoidForKickstandDisengaged);
}
}
public synchronized boolean isEngaged() {
return mEngaged;
}
@Override
public void stop() {}
@Override
public boolean checkSystem() {
return false;
}
@Override
public void outputTelemetry() {}
}