|
Re: Encoder's PID functional but getRate method not-functional???
The Drivetrain subsystem code:
Code:
package edu.wpi.first.wpilibj.templates.subsystems;
import edu.wpi.first.wpilibj.*;
import edu.wpi.first.wpilibj.command.Subsystem;
import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard;
import edu.wpi.first.wpilibj.templates.RobotMap;
import edu.wpi.first.wpilibj.templates.commands.UserShooter;
/**
*
* @author Spencer, Team 3266
*/
public class Shooter extends Subsystem implements PIDOutput, PIDSource {
Victor spinner;
Encoder spinnerEncoder;
PIDController pid;
double rpm = 0;
public void initDefaultCommand() {
setDefaultCommand(new UserShooter());
}
public Shooter() {
spinner = new Victor(RobotMap.spinnerVictor);
spinnerEncoder = new Encoder(RobotMap.spinnerEncoderA, RobotMap.spinnerEncoderB);
//spinnerEncoder.setPIDSourceParameter(Encoder.PIDSourceParameter.kRate);
spinnerEncoder.setDistancePerPulse(RobotMap.spinnerEncoderDistancePerPulse);
pid = new PIDController(RobotMap.spinnerKp, RobotMap.spinnerKi, RobotMap.spinnerKd, this, this);
pid.setContinuous(true);
}
public void startEncoder() {
spinnerEncoder.start();
pid.enable();
}
public void stopEncoder() {
spinnerEncoder.stop();
spinnerEncoder.reset();
pid.disable();
pid.reset();
}
public void setSpinner(double rpm) {
if(this.rpm!=rpm) {
pid.reset();
pid.enable();
this.rpm = rpm;
}
pid.setSetpoint(rpm/60);
}
public void stopSpinner() {
setSpinner(0.0);
}
public void pidWrite(double d) {
spinner.set(d);
}
public double pidGet() {
double rate = spinnerEncoder.getRate();
SmartDashboard.putNumber("Shooter Speed", rate*60);
return(rate);
}
}
__________________
2012: Buckeye Regional, Queen City Regional, Human Player
2013: Queen City Regional, Buckeye Regional, Crossroads Regional
Shooter Operator
2014: Crossroads Regional, Queen City Regional
Catapult Operator
2015: Georgia Southern Classic Regional (Winner), Queen City Regional
Chainsaw Operator
Want to talk? TeamSpeak: team3266.noip.me
Last edited by Team3266Spencer : 05-02-2013 at 20:53.
|