View Single Post
  #1   Spotlight this post!  
Unread 06-29-2016, 02:44 PM
Lesafian Lesafian is offline
Registered User
AKA: Jeremy Styma
FRC #6077 (Wiking Kujon)
Team Role: Programmer
 
Join Date: Feb 2016
Rookie Year: 2016
Location: Posen, Michigan
Posts: 19
Lesafian is an unknown quantity at this point
Rewrote Robot Code: Opinions/Thoughts?

I've decided to sharpen my skills and rewrite our robot code without reference to the old one (reason for TODO:'s on the autonomous choices), I'd like to know if I'm doing anything inefficient or if there's just a better way to do things. Thanks!

Code:
package org.usfirst.frc.team6077.robot;

import edu.wpi.first.wpilibj.*;
import edu.wpi.first.wpilibj.Joystick.*;
import edu.wpi.first.wpilibj.smartdashboard.*;
import edu.wpi.first.wpilibj.vision.*;

public class Robot extends SampleRobot {

	private RobotDrive drive;
	private VictorSP dm1, dm2, dm3, dm4;
	private TalonSRX armMotor, slideMotor;
	private DigitalInput limitSwitch;
	private Joystick xboxController;
	private SendableChooser driveChooser;
	private SendableChooser autoChooser;
	private CameraServer camServer;
	private USBCamera camera, camera2, selectedCamera;
	private DoubleSolenoid ds1, ds2;
	private Compressor compressor;

	private Object[] driveMotors = { dm1, dm2, dm3, dm4 };
	private String[] autoArray = { autoChoice1, autoChoice2, autoChoice3, autoChoice4, autoChoice5, autoChoice6 };

	private static final String tankDrive = "Tank Drive";
	private static final String arcadeDrive = "Arcade Drive";
	private static final String autoChoice1 = "Rough Terrain";
	private static final String autoChoice2 = "Portcullis";
	private static final String autoChoice3 = "Chival de Frise";
	private static final String autoChoice4 = "Low Bar (shooting)";
	private static final String autoChoice5 = "Low Bar (without shooting)";
	private static final String autoChoice6 = "Moat";

	public Robot() {
		// SmartDashboard
		//
		// Drive Chooser
		driveChooser = new SendableChooser();
		driveChooser.addDefault(arcadeDrive, arcadeDrive);
		driveChooser.addObject(tankDrive, tankDrive);
		SmartDashboard.putData("Drive Choices", driveChooser);

		// Autonomous Chooser & Drive Motors
		autoChooser = new SendableChooser();
		for (int i = 0; i <= (Math.max(autoArray.length, driveMotors.length)); i++) {
			autoChooser.addObject(autoArray[i], autoArray[i]);
			if (i <= driveMotors.length) {
				driveMotors[i] = new VictorSP(i);
			}
		}
		SmartDashboard.putData("Autonomous Choices", autoChooser);

		// Motor Speeds
		SmartDashboard.putNumber("Arm Speed", armMotor.get());
		SmartDashboard.putNumber("Carriage Speed", slideMotor.get());
		SmartDashboard.putNumber("Drive Speed", getDriveSpeed());

		// Drive config
		drive = new RobotDrive(dm1, dm2, dm3, dm4);

		// Joystick(s)
		xboxController = new Joystick(0);

		// Scoring utilities
		armMotor = new TalonSRX(4);
		slideMotor = new TalonSRX(5);

		// Digital Input
		limitSwitch = new DigitalInput(0);

		// Pneumatics
		compressor = new Compressor();
		compressor.setClosedLoopControl(true);
		compressor.start();
		ds1 = new DoubleSolenoid(0, 1);
		ds2 = new DoubleSolenoid(2, 3);

		// Camera
		camera = new USBCamera("cam0");
		camera2 = new USBCamera("cam1");
		camServer = CameraServer.getInstance();
		camServer.setQuality(100);
		closeOpenCam(camera2, camera);

	}

	public void autonomous() {
		switch (autoChooser.getSelected().toString()) {
		case (autoChoice1):
			// TODO:
			break;
		case (autoChoice2):
			// TODO:
			break;
		case (autoChoice3):
			// TODO:
			break;
		case (autoChoice4):
			// TODO:
			break;
		case (autoChoice5):
			// TODO:
			break;
		case (autoChoice6):
			// TODO:
			break;
		}
	}

	public void operatorControl() {
		drive.setSafetyEnabled(true);
		while (isOperatorControl() && isEnabled()) {
			String selectedDrive = driveChooser.getSelected().toString();
			if (selectedDrive.equalsIgnoreCase(arcadeDrive)) {
				drive.arcadeDrive(Values.XBOX_LEFTSTICK_X, -Values.XBOX_LEFTSTICK_Y);
				if (Math.abs(xboxController.getRawAxis(Values.XBOX_RIGHTSTICK_Y)) > 0) {
					slideMotor.set(xboxController.getRawAxis(Values.XBOX_RIGHTSTICK_Y));
				} else {
					slideMotor.set(0);
				}
			} else {
				drive.tankDrive(Values.XBOX_LEFTSTICK_Y, Values.XBOX_RIGHTSTICK_Y);
				if (xboxController.getRawButton(Values.XBOX_Y)) {
					slideMotor.set(1);
				} else if (xboxController.getRawButton(Values.XBOX_B)) {
					slideMotor.set(-1);
				} else {
					slideMotor.set(0);
				}
			}

			// Limit Drive speed;
			if (xboxController.getRawButton(Values.XBOX_A)) {
				drive.setMaxOutput(0.75);
			} else {
				drive.setMaxOutput(1.0);
			}

			// No Turn Driving
			// TODO:

			// Use Arms
			if (Math.abs(xboxController.getRawAxis(Values.XBOX_TRIGGER)) > 0) {
				armMotor.set(xboxController.getRawAxis(Values.XBOX_TRIGGER));
			} else {
				armMotor.set(0);
			}

			// LimitSwitch
			if (limitSwitch.get()) {
				if (slideMotor.getSpeed() > 0) {
					slideMotor.stopMotor();
				}
			}

			// Claw
			if (xboxController.getRawButton(Values.XBOX_LEFT_BUMPER)) {
				if (ds1.get() == DoubleSolenoid.Value.kForward) {
					ds1.set(DoubleSolenoid.Value.kReverse);
				} else {
					ds1.set(DoubleSolenoid.Value.kForward);
				}
			}

			// Shooter;
			if (xboxController.getRawButton(Values.XBOX_RIGHT_BUMPER)) {
				if (ds1.get() == DoubleSolenoid.Value.kForward) {
					rumbleABit();
				} else {
					ds2.set(DoubleSolenoid.Value.kForward);
					Timer.delay(0.75);
					ds2.set(DoubleSolenoid.Value.kReverse);
				}
			}

			// Camera Switcher
			if (xboxController.getRawButton(Values.XBOX_X)) {
				if (selectedCamera == camera) {
					closeOpenCam(camera, camera2);
				} else {
					closeOpenCam(camera2, camera);
				}
			}
		}
	}

	public void test() {
		// TODO: Nothing :P
	}

	private void closeOpenCam(USBCamera stopcam, USBCamera startcam) {
		// Stop first cam
		stopcam.stopCapture();
		stopcam.closeCamera();
		stopcam.updateSettings();

		// Start second cam
		selectedCamera = startcam;
		startcam.setSize(Values.CAM_WIDTH, Values.CAM_HEIGHT);
		startcam.openCamera();
		startcam.startCapture();
		startcam.updateSettings();
		camServer.startAutomaticCapture(selectedCamera);
	}

	private double getDriveSpeed() {
		return (dm1.get() + dm2.get() + dm3.get() + dm4.get()) / 4.0;
	}

	private void rumbleABit() {
		xboxController.setRumble(RumbleType.kLeftRumble, 1);
		xboxController.setRumble(RumbleType.kRightRumble, 1);
		Timer.delay(0.5);
		xboxController.setRumble(RumbleType.kLeftRumble, 0);
		xboxController.setRumble(RumbleType.kRightRumble, 0);
	}
}
Reply With Quote