-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathteleopProgramV3.java
More file actions
172 lines (146 loc) · 6.67 KB
/
teleopProgramV3.java
File metadata and controls
172 lines (146 loc) · 6.67 KB
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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
package december14Code;
import com.qualcomm.robotcore.eventloop.opmode.OpMode;
import com.qualcomm.robotcore.eventloop.opmode.TeleOp;
import com.qualcomm.robotcore.hardware.DcMotor;
import com.qualcomm.robotcore.hardware.Servo;
@TeleOp(name = "TeleOpV3", group = "Drive")
public class teleopProgramV3 extends OpMode {
// Declare motors
private DcMotor frontLeft, frontRight, backLeft, backRight;
private DcMotor leftLiftMotor, rightLiftMotor;
private Servo basketServo;
private static final double FRONT_WHEEL_RATIO = 3.0 / 1.0; // 3:2 sprocket ratio
public double motorSpeed = .5;
boolean noBasketPosition = true;
boolean lowBasket = false;
boolean highBasket = false;
@Override
public void init() {
// Initialize motors
frontLeft = hardwareMap.get(DcMotor.class, "frontLeft");
frontRight = hardwareMap.get(DcMotor.class, "frontRight");
backLeft = hardwareMap.get(DcMotor.class, "backLeft");
backRight = hardwareMap.get(DcMotor.class, "backRight");
// Set motors' directions if needed
frontLeft.setDirection(DcMotor.Direction.FORWARD);
frontRight.setDirection(DcMotor.Direction.REVERSE);
backLeft.setDirection(DcMotor.Direction.FORWARD);
backRight.setDirection(DcMotor.Direction.REVERSE);
// Set motors to use encoders
frontLeft.setMode(DcMotor.RunMode.STOP_AND_RESET_ENCODER);
frontRight.setMode(DcMotor.RunMode.STOP_AND_RESET_ENCODER);
backLeft.setMode(DcMotor.RunMode.STOP_AND_RESET_ENCODER);
backRight.setMode(DcMotor.RunMode.STOP_AND_RESET_ENCODER);
frontLeft.setMode(DcMotor.RunMode.RUN_USING_ENCODER);
frontRight.setMode(DcMotor.RunMode.RUN_USING_ENCODER);
backLeft.setMode(DcMotor.RunMode.RUN_USING_ENCODER);
backRight.setMode(DcMotor.RunMode.RUN_USING_ENCODER);
// Servo for basket
basketServo = hardwareMap.get(Servo.class, "basketServo");
// Initialize lift motors
leftLiftMotor = hardwareMap.get(DcMotor.class, "leftLiftMotor");
rightLiftMotor = hardwareMap.get(DcMotor.class, "rightLiftMotor");
// Set lift motors to use encoders
leftLiftMotor.setMode(DcMotor.RunMode.STOP_AND_RESET_ENCODER);
rightLiftMotor.setMode(DcMotor.RunMode.STOP_AND_RESET_ENCODER);
leftLiftMotor.setMode(DcMotor.RunMode.RUN_USING_ENCODER);
rightLiftMotor.setMode(DcMotor.RunMode.RUN_USING_ENCODER);
// Set all motors to zero power
setMotorPower(0, 0, 0, 0);
}
@Override
public void loop() {
// Get joystick values (replace gamepad with your controller source)
double y = -gamepad1.left_stick_y; // Forward/backward
double x = gamepad1.left_stick_x * 1.1; // Strafe
double rotation = gamepad1.right_stick_x; // Rotate
// Mecanum drive calculations
double frontLeftPower = (y + x + rotation) * FRONT_WHEEL_RATIO;
double frontRightPower = (y - x - rotation) * FRONT_WHEEL_RATIO;
double backLeftPower = y - x + rotation;
double backRightPower = y + x - rotation;
// Normalize the power values to be within -1 and 1
double maxPower = Math.max(1.0, Math.abs(frontLeftPower));
frontLeftPower /= maxPower;
frontRightPower /= maxPower;
backLeftPower /= maxPower;
backRightPower /= maxPower;
// Set motor power
setMotorPower(frontLeftPower, frontRightPower, backLeftPower, backRightPower);
// Check for lift and basket inputs
lift();
basket();
// Display encoder tick values for each lift motor
telemetry.addData("Left Lift Motor Position:", leftLiftMotor.getCurrentPosition());
telemetry.addData("Right Lift Motor Position:", rightLiftMotor.getCurrentPosition());
telemetry.update();
}
public void basket() {
boolean basketUp = gamepad1.dpad_up;
boolean basketDown = gamepad1.dpad_down;
if (basketUp) {
basketServo.setPosition(.5);
} else if (basketDown) {
basketServo.setPosition(0.0); // Corrected position value
}
}
public void prepareUpwardLift(int leftTargetPosition, int rightTargetPosition) {
// Strafing configuration for mecanum wheels
leftLiftMotor.setTargetPosition(leftTargetPosition);
rightLiftMotor.setTargetPosition(rightTargetPosition);
leftLiftMotor.setMode(DcMotor.RunMode.RUN_TO_POSITION);
rightLiftMotor.setMode(DcMotor.RunMode.RUN_TO_POSITION);
leftLiftMotor.setPower(motorSpeed);
rightLiftMotor.setPower(-motorSpeed);
}
public void prepareDownwardLift(int leftTargetPosition, int rightTargetPosition) {
// Strafing configuration for mecanum wheels
leftLiftMotor.setTargetPosition(leftTargetPosition);
rightLiftMotor.setTargetPosition(rightTargetPosition);
leftLiftMotor.setMode(DcMotor.RunMode.RUN_TO_POSITION);
rightLiftMotor.setMode(DcMotor.RunMode.RUN_TO_POSITION);
leftLiftMotor.setPower(-motorSpeed);
rightLiftMotor.setPower(motorSpeed);
}
private void lift() {
boolean liftDown = gamepad1.right_bumper;
boolean liftUp = gamepad1.left_bumper;
if (liftUp) {
if (noBasketPosition) {
prepareUpwardLift(-2243, 1075); // low basket encoder positions
lowBasket = true;
noBasketPosition = false;
}
else if (lowBasket && !leftLiftMotor.isBusy() && !rightLiftMotor.isBusy()) {
prepareUpwardLift(-4953, 1580); // high basket encoder positions
highBasket = true;
lowBasket = false;
}
} else if (liftDown) {
if (lowBasket && !leftLiftMotor.isBusy() && !rightLiftMotor.isBusy()) {
// decrease low basket encoder positions
prepareDownwardLift(0, 0);
lowBasket = false;
noBasketPosition = true;
}
else if (highBasket) {
prepareDownwardLift(-2243, 1075);
highBasket = false;
lowBasket = true;
}
} else {
leftLiftMotor.setPower(0);
rightLiftMotor.setPower(0);
}
}
private void setMotorPower(double fl, double fr, double bl, double br) {
frontLeft.setPower(fl);
frontRight.setPower(fr);
backLeft.setPower(bl);
backRight.setPower(br);
}
@Override
public void stop() {
setMotorPower(0, 0, 0, 0);
}
}