|
|
|
![]() |
|
|||||||
|
||||||||
![]() |
|
|
Thread Tools | Rate Thread | Display Modes |
|
|
|
#1
|
||||
|
||||
|
New to FRC programming... How does this look?
I am completely new at FRC programming, and I'm not sure what really is the best way to go about it. Anyone care to give suggestions?
Code:
package edu.wpi.first.wpilibj.templates;
import edu.wpi.first.wpilibj.*;
public class RobotTemplate extends IterativeRobot {
public RobotDrive drivetrain;
public Joystick leftStick;
public Joystick rightStick;
public Joystick KTrigger;
public Gyro gyro; //gyro
public Watchdog getWatchdog;
public void robotInit(){
drivetrain = new RobotDrive(1, 2, 3, 4);
leftStick = new Joystick(1);
rightStick = new Joystick(2);
KTrigger = new Joystick(3);
}
public void autonomousPeriodic(){
getWatchdog.kill();
int x = 1;
do{
gyro.reset();
int i=0;
while(i<4){
drivetrain.drive(0.5,0.0); //START GOING STRAIGHT
Timer.delay(4.0);
drivetrain.drive(0.0,0.0); //STOP
Timer.delay(4.0);
gyro.reset();
double angle = 0;
do {
drivetrain.drive(0.0, 0.15); //TURN
Timer.delay(0.5);
angle += gyro.getAngle(); //
gyro.reset();
log("Gyro reads "+angle);
}while(angle<90); //Keep going in increments of .15 until gyro returns more than 90 degrees
drivetrain.drive(0.0,0.0); //STOP
Timer.delay(4.0);
i++;
}
}while(x>0);
}
public void teleopPeriodic() {
getWatchdog().kill();
while (isOperatorControl() && isEnabled()){
Timer.delay(0.002);
while(KTrigger.getTrigger()){
drivetrain.drive(0.0,0.0);
Timer.delay(1.0);
}
double leftYAxis = leftStick.getAxis(Joystick.AxisType.kY);
double leftXAxis = leftStick.getAxis(Joystick.AxisType.kX);
double rightYAxis = rightStick.getAxis(Joystick.AxisType.kY);
double rightXAxis = rightStick.getAxis(Joystick.AxisType.kX);
double powerValue = ((leftXAxis+rightXAxis)/2); // FIND RIGHT CALCULATION FOR 0-100% (0.0-1.0)
double turnValue = ((leftYAxis+rightYAxis)/2);//FIND RIGHT CALCULATION FOR 0.0-1.0
drivetrain.drive(powerValue,turnValue);
}
}
public static String log(String aMessage){
System.out.println(aMessage);
return aMessage;
}
}
|
|
#2
|
||||
|
||||
|
Re: New to FRC programming... How does this look?
Quote:
Just some quick suggestions ![]() Last edited by Djur : 31-01-2012 at 09:07. Reason: Misread robotInit() |
|
#3
|
||||
|
||||
|
Re: New to FRC programming... How does this look?
Thanks so much for the help
![]() Look better? Code:
package edu.wpi.first.wpilibj.templates;
import edu.wpi.first.wpilibj.*;
public class RobotTemplate extends IterativeRobot {
public RobotDrive drivetrain;
public Joystick joystick;
public Joystick KTrigger;
public Gyro gyro; //gyro
public void robotInit(){
drivetrain = new RobotDrive(1, 2, 3, 4);
joystick = new Joystick(1);
KTrigger = new Joystick(1);
gyro = new Gyro(1);
}
public void autonomousContinous(){
int x = 1;
do{
gyro.reset();
int i=0;
while(i<4){
drivetrain.drive(0.5,0.0); //START GOING STRAIGHT
Timer.delay(4.0);
drivetrain.drive(0.0,0.0); //STOP
Timer.delay(4.0);
gyro.reset();
double angle = 0;
do {
drivetrain.drive(0.0, 0.15); //TURN
Timer.delay(0.5);
angle += gyro.getAngle(); //
gyro.reset();
log("Gyro reads "+angle);
}while(angle<90); //Keep going in increments of .15 until gyro returns more than 90 degrees
drivetrain.drive(0.0,0.0); //STOP
Timer.delay(4.0);
i++;
}
}while(x>0);
}
public void teleopContinous() {
while (isOperatorControl() && isEnabled()){
if(KTrigger.getTrigger())
{drivetrain.drive(0,0);
log("Brake enabled");}
double YAxis = joystick.getAxis(Joystick.AxisType.kY);
double XAxis = joystick.getAxis(Joystick.AxisType.kX);
drivetrain.drive(YAxis,XAxis);
}
}
public static String log(String aMessage){
System.out.println(aMessage);
return aMessage;
}
}
|
|
#4
|
||||
|
||||
|
Re: New to FRC programming... How does this look?
This may just be one of the things that I do and find useful, but creating constants for port numbers can be extremely useful for someone who has not read your code and is not using your robot.
Things like Code:
private static final int DRIVE_LEFT_FRONT = 1; Jaguar frontLeftDrive = new Jaguar(DRIVE_LEFT_FRONT); Also, to find the x axis/y axis value just type joystick.getX() or joystick.getY(). You also do not need to set the value of the joystick to a double before supplying it to the drive() method. Code:
public static String log(String aMessage){
System.out.println(aMessage);
return aMessage;
}
Last edited by eddie12390 : 01-02-2012 at 11:56. |
|
#5
|
|||
|
|||
|
Re: New to FRC programming... How does this look?
Code:
double angle = 0;
do {
drivetrain.drive(0.0, 0.15); //TURN
drivetrainTimer.delay(0.5);
angle += gyro.getAngle(); //
gyro.reset();
log("Gyro reads "+angle);
}while(angle<90); //Keep going in increments of .15 until gyro
And only reset your gyro when you need to, and not when its moving. You want to stop and wait a little so that you have a steady zero value. Last edited by omalleyj : 02-02-2012 at 10:17. |
|
#6
|
||||
|
||||
|
Re: New to FRC programming... How does this look?
Like omalleyj said, resetting gyro in the loop isn't a good way, especially when it's moving.
I would do something simple like this: Code:
// Reset gyro before the main loop, or with a button.
double angle = gyro.getAngle();
if (angle < 90) {
drivetrain.drive(0.0, 0.15); // I don't know how turn works, I've only done tank drive and mecanum drive in the past.
}
|
![]() |
| Thread Tools | |
| Display Modes | Rate This Thread |
|
|