Go to Post "GP" isn't a gauge, it's a target. - Rich Kressly [more]
Home
Go Back   Chief Delphi > Technical > Programming > Java
CD-Media   CD-Spy  
portal register members calendar search Today's Posts Mark Forums Read FAQ rules

 
 
 
Thread Tools Rate Thread Display Modes
Prev Previous Post   Next Post Next
  #1   Spotlight this post!  
Unread 29-06-2016, 14:44
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
 


Thread Tools
Display Modes Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump


All times are GMT -5. The time now is 09:37.

The Chief Delphi Forums are sponsored by Innovation First International, Inc.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Copyright © Chief Delphi