Programming or Electrical Issue?

Our team is using 2 CIM motors using Victor speed controllers. Here’s the code that I’ve written.


package org.usfirst.frc.team6077.robot;

import edu.wpi.first.wpilibj.SampleRobot;
import edu.wpi.first.wpilibj.Solenoid;
import edu.wpi.first.wpilibj.TalonSRX;
import edu.wpi.first.wpilibj.Victor;
import edu.wpi.first.wpilibj.command.Scheduler;
import edu.wpi.first.wpilibj.livewindow.LiveWindow;
import edu.wpi.first.wpilibj.RobotDrive;
import edu.wpi.first.wpilibj.Compressor;
import edu.wpi.first.wpilibj.DoubleSolenoid;
import edu.wpi.first.wpilibj.Joystick;
import edu.wpi.first.wpilibj.smartdashboard.SendableChooser;
import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard;

public class Robot extends SampleRobot {

    // RobotDrive Declaration
	RobotDrive drive;
	
	// Compressor Declaration
	Compressor compressor;
	
	// Solenoid Declaration
	DoubleSolenoid doublesolenoid;
	Solenoid solenoid;

	// Joystick Declaration
	Joystick xboxController;

	// Motor Controller Declaration
	TalonSRX armMotor;
	TalonSRX slideMotor;
	
	Victor drivemotor1;
	Victor drivemotor2;

	// Autonomous Names
	final String defaultAuto = "Default";
	final String customAuto = "Autonomous Choice 1";
	final String customAuto2 = "Autonomous Choice 2";
	final String customAuto3 = "Autonomous Choice 3";
	final String customAuto4 = "Autonomous Choice 4";
	final String customAuto5 = "Autonomous Choice 5";

	// Chooser
	SendableChooser chooser;

	public Robot() {
		
		//Change values later
		drivemotor1 = new Victor(0);
		drivemotor2 = new Victor(2);
		
		compressor = new Compressor(0);
		
		drive = new RobotDrive(drivemotor1, drivemotor2);
		drive.setExpiration(0.1);
		
		xboxController = new Joystick(0);
		
		armMotor = new TalonSRX(5);
		slideMotor = new TalonSRX(4);

		doublesolenoid = new DoubleSolenoid(0, 1);
		solenoid = new Solenoid(2);

		chooser = new SendableChooser();
		
		LiveWindow.addActuator("Drive", "Left Motor", drivemotor1);
		LiveWindow.addActuator("Drive", "Right Motor", drivemotor2);

	}

	public void robotInit() {
		compressor.start();
		compressor.setClosedLoopControl(true);
		chooser.addDefault("Default Auto", defaultAuto);
		chooser.addObject("Autonomous Choice 1", customAuto);
		chooser.addObject("Autonomous Choice 2", customAuto2);
		chooser.addObject("Autonomous Choice 3", customAuto3);
		chooser.addObject("Autonomous Choice 4", customAuto4);
		chooser.addObject("Autonomous Choice 5", customAuto5);
		SmartDashboard.putData("Autonomous Chooser", chooser);
	}

	public void autonomous() {
		drive.setSafetyEnabled(false);
		String autoSelected = (String) chooser.getSelected();
		System.out.println("Autonomous Mode selected: " + autoSelected);

		switch (autoSelected) {

		case customAuto5:
			break;
		case customAuto4:
			break;
		case customAuto3:
			break;
		case customAuto2:
			break;
		case customAuto:
			break;
		case defaultAuto:
		default:
			break;
		}
		Scheduler.getInstance().run();
	}

	public void operatorControl() {
		drive.setSafetyEnabled(false);
		while (isOperatorControl() && isEnabled()) {
			
			// Move robot using left and right joystick
			drive.tankDrive(xboxController.getRawAxis(0), xboxController.getRawAxis(5));

			// Lift and lower the arms using the right and left bumper.

			if (xboxController.getRawButton(5)) {
				armMotor.set(1);

			} else if (xboxController.getRawButton(4)) {
				armMotor.set(-1);
				
			} else {
				
				armMotor.set(0);
			}

			// Move sliding mechanism forwards and backwardss
			
			if (Math.abs(xboxController.getRawAxis(5)) > .1) {
     
				slideMotor.set(xboxController.getRawAxis(5));
				
			} else {
				
				slideMotor.set(0);
            }

			// Open and close the claw
			if (xboxController.getRawButton(2)) {
				doublesolenoid.set(DoubleSolenoid.Value.kForward);
				
			} else if (xboxController.getRawButton(1)) {
				doublesolenoid.set(DoubleSolenoid.Value.kReverse);
			}
		}
	}

	public void test() {
	}

There are 0 errors in eclipse, and it builds successfully. The Riolog shows nothing, and the driver station shows 0 errors.

We’re using an XBoxController. I’m also positive that we’re using PWM port 0, and 2 for our CIM drive motors.

The problem is, the drive motors do not move. The compressor turns on, and for what we have hooked up, pneumatics works.

UPDATE
After going through everything, I’ve realized that I had Victors programmed when we were using VictorSP’s. The drive now works. :slight_smile:

Are your victors outputting any voltage/getting signal?

Did you ensure those numbers (0 and 2) are the correct numbers for the Victors?

Are you sure you are deploying the correct project? (happened to us one day preseason)

By “pneumatics works”, does that mean you can actuate some of the solenoids?

Follow the signal all the way from joystick to motion - you could have issues at any step. Here are a few things to try:

  • Watch the diagnositcs on the motor controller. Are they in neutral or drive forward or reverse? (I’m not familiar with the Victors’ colors; we haven’t used them since I got involved.) If the lights show the right answer, it’s somewhere between the controller and the wheel. If they don’t, it’s somewhere on the user/rio side of the controller (or in the controller).
  • Monitor the input arguments to drive.tankDrive(). If these are bad, check the joysticks, both wiring and programming.
  • Try adding commands to individually spin the drive motors, similar to what you’re doing with the actuators. This will help verify that the motors are connected to the ports you’re expecting.

You don’t have a wait method in the periodic. The motors cannot update.
put the line “Timer.delay(0.0075);” at the end of your public void operatorControl() method.

source:https://wpilib.screenstepslive.com/s/4485/m/13809/l/241857-getting-your-robot-to-drive-with-the-robotdrive-class