You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

227 lines
6.5 KiB
C

5 years ago
#pragma config(I2C_Usage, I2C1, i2cSensors)
5 years ago
#pragma config(Sensor, I2C_1, , sensorQuadEncoderOnI2CPort, , AutoAssign )
#pragma config(Sensor, I2C_2, , sensorQuadEncoderOnI2CPort, , AutoAssign )
#pragma config(Motor, port1, , tmotorVex393_HBridge, openLoop)
#pragma config(Motor, port2, shoot, tmotorVex393_MC29, openLoop, reversed)
5 years ago
#pragma config(Motor, port3, driveLB, tmotorVex393_MC29, openLoop, reversed, encoderPort, I2C_2)
5 years ago
#pragma config(Motor, port4, driveLF, tmotorVex393_MC29, openLoop, reversed)
5 years ago
#pragma config(Motor, port5, driveRB, tmotorVex393_MC29, openLoop, reversed, encoderPort, I2C_1)
5 years ago
#pragma config(Motor, port6, driveRF, tmotorVex393_MC29, openLoop)
#pragma config(Motor, port7, bintake, tmotorVex393_MC29, openLoop, reversed)
#pragma config(Motor, port8, , tmotorVex393_MC29, openLoop)
#pragma config(Motor, port9, , tmotorVex393_MC29, openLoop)
#pragma config(Motor, port10, , tmotorVex393_HBridge, openLoop)
//*!!Code automatically generated by 'ROBOTC' configuration wizard !!*//
#pragma platform(VEX2)
#pragma competitionControl(Competition)
#include "Vex_Competition_Includes.c"
// some variable definitions
5 years ago
#define MAX_SPEED 127 // Max speed of the motors
5 years ago
#define STOP 0
5 years ago
#define DEADZONE 10
5 years ago
/*
5 years ago
23.4 / (2 * pi * 2.075) * 672.2
5 years ago
23.4 = inches in a tile
2.075 = exact radius of 4" omniwheels
2 * pi * r is circumference of the wheel
5 years ago
627.2 points in a revolution with the vex encoders
final calculation is the amount of points of rotation per tile of movement
5 years ago
*/
5 years ago
#define TILE 1206
// How much the wheels should spin in a 90 degree turn
5 years ago
#define POINTS_PER_TURN 320
5 years ago
// definitions for driveTiles()
#define FORWARD true
#define REVERSE false
5 years ago
5 years ago
void clearEnc() { // Reset driving motor encoder values to 0
nMotorEncoder[driveRB] = 0;
5 years ago
nMotorEncoder[driveLB] = 0;
5 years ago
}
5 years ago
void shootBall() {
motor[shoot] = MAX_SPEED;
5 years ago
wait(1.25); // Shooting takes 1.25 seconds.
5 years ago
// Any unwanted extra movement will be undone by the rubber bands.
motor[shoot] = STOP;
5 years ago
}
5 years ago
void turntoRight(float turns) {
clearEnc();
while(turns * POINTS_PER_TURN > nMotorEncoder[driveLB]){
motor[driveLB] = 100;
5 years ago
motor[driveLF] = 100;
5 years ago
motor[driveRB] = -100;
motor[driveRF] = -100;
}
motor[driveLB] = 0;
5 years ago
motor[driveLF] = 0;
5 years ago
motor[driveRB] = 0;
motor[driveRF] = 0;
}
void turntoLeft(float turns) {
clearEnc();
while(turns * POINTS_PER_TURN > nMotorEncoder[driveRB]){
motor[driveLB] = -100;
5 years ago
motor[driveLF] = -100;
5 years ago
motor[driveRB] = 100;
motor[driveRF] = 100;
5 years ago
}
5 years ago
motor[driveLB] = 0;
5 years ago
motor[driveLF] = 0;
5 years ago
motor[driveRB] = 0;
motor[driveRF] = 0;
}
5 years ago
5 years ago
void flipOn() {
motor[bintake] = -MAX_SPEED;
}
void ballOff() {
motor[bintake] = 0;
}
void ballIn() {
motor[bintake] = MAX_SPEED;
}
5 years ago
void joystickDrive() {
if(abs(vexRT[Ch3]) > DEADZONE) {
motor[driveLB] = vexRT[Ch3];
motor[driveLF] = vexRT[Ch3];
}
else {
motor[driveLB] = STOP;
motor[driveLF] = STOP;
}
if(abs(vexRT[Ch2]) > DEADZONE) {
motor[driveRB] = vexRT[Ch2];
motor[driveRF] = vexRT[Ch2];
5 years ago
}
5 years ago
else {
motor[driveRB] = STOP;
motor[driveRF] = STOP;
5 years ago
}
5 years ago
}
void buttonChecks() {
if (vexRT[Btn5U] == 1) {
motor[bintake] = MAX_SPEED;
}
else if (vexRT[Btn5D] == 1) {
motor[bintake] = -MAX_SPEED;
}
else {
motor[bintake] = STOP;
}
if (vexRT[Btn8D] == 1) {
shootBall();
5 years ago
} // No need for reverse on the ball launcher!
5 years ago
}
void pre_auton() {
/* Set bStopTasksBetweenModes to false if you want to keep user created tasks
running between Autonomous and Driver controlled modes. You will need to
manage all user created tasks if set to false. */
bStopTasksBetweenModes = true;
}
5 years ago
void driveTiles(float numberOfTiles, bool direction) {
5 years ago
// when direction is true, move forward, otherwise go in reverse
5 years ago
clearEnc();
5 years ago
while(direction == FORWARD && numberOfTiles * TILE - 200 > nMotorEncoder[driveRB]) {
if(abs(nMotorEncoder[driveRB]) - 10 > nMotorEncoder[driveLB]) {
5 years ago
motor[driveLB] = 100;
5 years ago
motor[driveLF] = 100;
5 years ago
motor[driveRB] = 90;
5 years ago
motor[driveRF] = 90;
}
5 years ago
if(abs(nMotorEncoder[driveLB]) - 10 > nMotorEncoder[driveRB]) {
5 years ago
motor[driveLB] = 90;
5 years ago
motor[driveLF] = 90;
5 years ago
motor[driveRB] = 100;
5 years ago
motor[driveRF] = 100;
} else {
5 years ago
motor[driveLB] = 100;
5 years ago
motor[driveLF] = 100;
5 years ago
motor[driveRB] = 100;
5 years ago
motor[driveRF] = 100;
}
}
5 years ago
while(direction == REVERSE && numberOfTiles * TILE - 200 > -nMotorEncoder[driveRB]) {
if(abs(nMotorEncoder[driveRB]) - 10 > nMotorEncoder[driveLB]) {
5 years ago
motor[driveLB] = -100;
5 years ago
motor[driveLF] = -100;
5 years ago
motor[driveRB] = -90;
5 years ago
motor[driveRF] = -90;
}
5 years ago
if(abs(nMotorEncoder[driveLB]) - 10 > nMotorEncoder[driveLB]) {
5 years ago
motor[driveLB] = -90;
5 years ago
motor[driveLF] = -90;
5 years ago
motor[driveRB] = -100;
5 years ago
motor[driveRF] = -100;
} else {
5 years ago
motor[driveLB] = -100;
5 years ago
motor[driveLF] = -100;
5 years ago
motor[driveRB] = -100;
5 years ago
motor[driveRF] = -100;
}
5 years ago
}
5 years ago
motor[driveLB] = 0;
5 years ago
motor[driveLF] = 0;
5 years ago
motor[driveRB] = 0;
motor[driveRF] = 0;
5 years ago
}
task autonomous() {
5 years ago
turntoRight(0.03);
5 years ago
shootBall();
5 years ago
turntoLeft(0.03);
5 years ago
driveTiles(2, FORWARD); // Move 2 forward to hit bottom flag
driveTiles(1, REVERSE);
5 years ago
turntoRight(1);
driveTiles(0.5, REVERSE); // Drive 1/3 of a tile backwards to hit the wall and align ourselves!
5 years ago
flipOn(); // Turn on the ball intake in reverse, which is what we can use to flip the caps
5 years ago
driveTiles(1.6, FORWARD); // flip cap
5 years ago
ballOff();
5 years ago
driveTiles(1.35, REVERSE);
5 years ago
turntoLeft(1);
5 years ago
driveTiles(1, REVERSE);
5 years ago
turntoRight(1);
driveTiles(0.6, REVERSE);
5 years ago
driveTiles(2.1, FORWARD); // Flip the other cap without turning on the spinner
5 years ago
flipOn();
driveTiles(0.5, FORWARD);
5 years ago
ballIn();
driveTiles(0.1, REVERSE);
// So we can pick up the ball!
5 years ago
wait(3);
5 years ago
driveTiles(0.1, REVERSE);
5 years ago
turntoLeft(1);
5 years ago
driveTiles(0.2, REVERSE);
5 years ago
wait(3);
5 years ago
ballOff();
shootBall();
5 years ago
driveTiles(0.05, REVERSE);
driveTiles(0.33, FORWARD); // Hit middle column bottom flag
5 years ago
//driveTiles(2, REVERSE);
5 years ago
wait(2);
5 years ago
turntoRight(1);
5 years ago
driveTiles(2.2, REVERSE);
5 years ago
turntoLeft(1);
driveTiles(1, REVERSE);
turntoRight(1);
driveTiles(0.25, REVERSE);
driveTiles(3, FORWARD);
5 years ago
5 years ago
}
5 years ago
task usercontrol() { // In user control mode
5 years ago
while (true) {
5 years ago
joystickDrive(); // Joystick mapping function
buttonChecks(); // Button mapping, for lift, ball launcher, etc.
5 years ago
}
}