Log in

View Full Version : Code does not work, and there seems to be 0 issues.


Lesafian
03-02-2016, 17:55
I've written code for our robot, but it is not working. There are 0 errors in Eclipse, and 0 errors in the driver station. I'm not sure if it's an issue with the code or with our electric wiring. Here is the code, please let me know if there's anything wrong.


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.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.SendableChoos er;
import edu.wpi.first.wpilibj.smartdashboard.SmartDashboar d;

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();

}

public void robotInit() {
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() {
compressor.getPressureSwitchValue();
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() {
compressor.getPressureSwitchValue();
drive.setSafetyEnabled(true);
while (isOperatorControl() && isEnabled()) {

// Move robot using left and right joystick
drive.tankDrive(xboxController.getRawAxis(2), 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() {
}
}

TimTheGreat
03-02-2016, 18:11
Which part? Also, why do you have a Robot constructor? You don't need that

Lesafian
03-02-2016, 18:18
Nothing works, and what do you mean?

TimTheGreat
03-02-2016, 18:36
Nothing works, and what do you mean?

So you have public Robot(). You don't need this method. Just put it all in robotInit

c0d3rman
03-02-2016, 20:14
When you say "nothing works", what exactly do you mean? What is happening when you enable?

Lesafian
03-02-2016, 20:45
The drive motors do not turn, the arm motor does not turn, the slide motor does not turn. The compressor works though.

dvanvoorst
03-02-2016, 20:52
Maybe your joystick isn't working?
Have you had the code working before? If so, what changes have been made?

JacobD
03-02-2016, 21:04
If there are 0 errors, be sure that you have the rioLog open in eclipse (open from the view menu). Also, assuming that you do not have any errors, have you used this roboRio successfully before now? Have you performed any recent updates? Have you installed Java on the rio?

Lesafian
03-02-2016, 22:57
Yes, it has worked successfully. No I have not updated anything. No, there are 0 Rio log errors. Yes Ive installed java on it.

pblankenbaker
04-02-2016, 08:25
Try adding some diagnostic tools to your code.

For example at the end of your constructor, try adding the following two lines:


LiveWindow.addActuator("Drive", "Left Motor", drivemotor1);
LiveWindow.addActuator("Drive", "Right Motor", drivemotor2);


If you deploy the code and put your Driver Station in "Test" mode, you should see two sliders appear on your SmartDashboard related to your drive motors. You should be able to adjust the sliders and see the motors turn.

You can also add "debug output" that appears during normal operation. Try adding the following field (lastDashboardUpdate) and method to your Robot class:


// time stamp of last time we sent values to dash board
private double lastDashboardUpdate = 0;

private void updateDashboard() {
double now = Timer.getFPGATimestamp();

// Diagnostic updates about 10 times a second
if ((now - lastDashboardUpdate) > 0.1) {
lastDashboardUpdate = now;

// Diagnostic information about the state of the robot
SmartDashboard.putNumber("Left Stick", xboxController.getRawAxis(2));
SmartDashboard.putNumber("Right Stick", xboxController.getRawAxis(5));
SmartDashboard.putNumber("Left Drive Power", drivemotor1.get());
SmartDashboard.putNumber("Right Drive Power", drivemotor2.get());
}
}


Then, inside the while() loop in your operatorControl() method, call the new updateDashboard() method.

Deploy the code and start the driver station in Teleop mode. You should see values update on your smart dashboard corresponding to the inputs on your game pad and the output power of your drive motors. If you see zero values on your joysticks even when you are moving them, check the driver station console and make certain that your gamepad has not been re-mapped to a different port.

After you get things working on the drive, you can comment out the debug output in the updateDashboard() method and use this approach to troubleshoot the rest of your components.

Chris Hibner
04-02-2016, 08:52
Code does not work, and there seems to be 0 issues.

First, as someone who does software for a living, I would be an extremely rich person if I had $0.05 for every time I've heard (or said) those words. :)


Second, your location says Posen. Is that as in Posen, MI? That would be pretty cool because I'm from that general area.


Anyway, sorry to sidetrack the coversation.

Lesafian
04-02-2016, 18:13
Posen, MI. :)