The biggest thing to realize is that programming for a robot has a different mindset most of the time than a desktop application.
Unlike a desktop application you are usually not doing one set of instructions in a set order then exiting the program. You usually have a “control loop”. The code should maintain the state of the robot every so often, taking in inputs such as sensors, joysticks, etc, and send outputs such as giving motors power, activating pneumatics, etc.
I would definitely try to build a testing board to play with if you have the materials available to you.
There are a lot of templated things available for you in the WPILib (such as the SimpleRobot, IterativeRobot, and CommandBasedRobot templates). The FRC plugins also come packaged with a multitude of example projects that I suggest poking through and trying to understand.
Here is a very stripped down version of our autonomous. This shoots the frisbees.
// Int
int maxShootCount;
int currShootCount;
public void autonomousInit() {
maxShootCount = 6; //Does 6 Shots Just In Case Of Jam
currShootCount = 0; //Starts At 0 Shots
systimer.start();
systimer.reset();
}
/**
* This function is called periodically during autonomous
*/
public void autonomousPeriodic() {
double currentTime = systimer.get();
if (currentTime < 3) {
jaguar3.set(0.64); //Turn on shooter jags
jaguar4.set(0.64); //Turn on shooter jags
} else if (currentTime >= 3 && currentTime < 10) {
if(currShootCount < maxShootCount) //If our current shot count is less than the max(6 shot max) then do the below code
{
solenoid3.set(true); //Activate Frisbee Launcher
solenoid4.set(false); //Activate Frisbee Launcher
Timer.delay(0.5);
solenoid3.set(false); //Deactivate Frisbee Launcher
solenoid4.set(true); //Deactivate Frisbee Launcher
solenoid5.set(true); //Activate Frisbee Dropper
solenoid6.set(false); //Activate Frisbee Dropper
Timer.delay(0.4);
solenoid5.set(false); //Deactivate Frisbee Dropper
solenoid6.set(true); //Deactivate Frisbee Dropper
Timer.delay(0.5);
}
currShootCount++; //Add on a count when code cycles through each time until it hits 2 shots
} else if (currentTime >= 10 && currentTime < 10.5) {
jaguar3.set(0); //Turn off shooter jags
jaguar4.set(0); //Turn off shooter jags
robotDrive.drive(1, 0); //Drive Forward Full Speed
} else if (currentTime >= 10.5 && currentTime < 11.2) {
robotDrive.drive(0.0); //Stop driving
Solenoid7.set(false); //this puts the shooter down
Solenoid8.set(true); //this puts the shooter down
} else if (currentTime >= 11.2 && currentTime < 15) {
solenoid1.set(true); //puts the robot in low gear
solenoid2.set(false); //puts the robot in low gear
robotDrive.drive(-1, 0); //Drives backwards full speed
} else (currentTime = 15) {
robotDrive.drive(0, 0); //stops driving
solenoid1.set(false); //puts the robot in high gear for teleop
solenoid2.set(true); //puts the robot in high gear for teleop
}
}
Hope this helps you with some ideas. If you need any explanation, I will do the best i can to explain.
Another quick question- how do I read the API exactly? (This one http://robotics.francisparker.org/javadoc/ ) Yes, I’m very new to this, but I’m determined to become an able coder by the beginning of the upcoming year.
Don’t worry this is my first year doing java for my team and it worked out great. I can try to explain the API to you the best i can. It basically has everything that the wpi library has to help or tell you what features are there and how to use them. Like for jaguar. If you find the jaguar on there it says:
Constructor Summary
Jaguar(int channel)
Constructor that assumes the default digital module.
Jaguar(int slot, int channel)
Constructor that specifies the digital module.
So i dont need to specify a slot when im constructing this. So in my code it is
Jaguar jaguar1 = new “Jaguar(1)”; The quotations dont go in the code they are to show you what the API says to do to construct it.
void set(double speed)
Set the PWM value.
for this i can do if(joystick1.getRawButton(1)) {
jaguar1.set(0.64); //the jaguar values are -1 to 1 and 0 is no output
} else {
jagaur1.set(0.0);
}
I dont know if this helped you at all or not. Hopefully it did.