View Single Post
  #11   Spotlight this post!  
Unread 27-01-2016, 14:39
techkid86's Avatar
techkid86 techkid86 is offline
Magic Programer
FRC #3044 (0xBE4)
Team Role: Alumni
 
Join Date: Jan 2011
Rookie Year: 2010
Location: ballston spa
Posts: 58
techkid86 is an unknown quantity at this point
Arrow Re: Drive train PID control

More or less yes. So you're using talons. PWM I assume? if so, the following code should be enough to set up your drive.

using only basic classes:
Code:
Talon leftDrive=new Talon(1);
Talon rightDrive=new Talon(2);

//if using gamepad
Joystick gamepad=new Joystick(1);

//if using two individual joysticks
Joystick leftJoy=new Joystick(1);
Joystick leftJoy=new Joystick(2);

Encoder leftEncoder=new Encoder(1,2);
Encoder rightEncoder=new Encoder(1,2);

PIDController leftPID=new PIDController(0.1,0,0, leftEncoder, leftDrive);
PIDController rightPID=new PIDController(0.1,0,0, rightEncoder, rightDrive);

public void robotInit()
{
leftEncoder.setPIDSourceType(PIDSourceType.kDisplacement); rightEncoder.setPIDSourceType(PIDSourceType.kDisplacement); rightEncoder.setReverseDirection(true); rightDrive.setInverted(true); //only one side needs inversion leftEncoder.reset(); rightEncoder.reset(); leftPID.setOutputRange(-0.75,0.75); //max speed it can set to motors rightPID.setOutputRange(-0.75,0.75); //max speed it can set to motors leftPID.enable(); rightPID.enable();
} public void autonomousPeriodic() {
leftPID.setSetpoint(400); rightPID.setSetpoint(400); //set distance. you can change distance per tick through the encoder
} public void teleopInit() {
leftPID.disable(); rightPID.disable();
} public void teleopPeriodic() {
//for two joysticks leftDrive.set(leftJoy.getY()); rightDrive.set(rightJoy.getY()); //for one gamepad leftDrive.set(gamepad.getRawAxis(1)); rightDrive.set(gamepad.getRawAxis(2)); //replace 1 and 2 axis with actual axis number.
}
__________________
"you can build a perfect machine out of imperfect parts" -Urza

Last edited by techkid86 : 27-01-2016 at 14:51.
Reply With Quote