Help for a beginner

Hey guys! I’m relatively new to coding and I decided to learn some more before next year.

I’ve learned mostly simple stuff for “regular” java coding, like if-then-else, while, how to print lines, variables, etc.

How do I apply this to coding a robot?

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.

http://wpilib.screenstepslive.com/s/3120/m/7885

Here is a list of things i went through to learn java for FRC.





http://wpilib.screenstepslive.com/s/3120/m/7885
http://robotics.francisparker.org/javadoc/
http://first.wpi.edu/FRC/frcjava.html
http://first.wpi.edu/Images/CMS/First/Getting_Started_with_Java_for_FRC.pdf
http://first.wpi.edu/Images/CMS/First/WPI_Robotics_Library_Users_Guide.pdf

Thanks so much for your help! Unfortunately I haven’t been able to gain access to a test board, but I’ve been given permission to use an older robot.

I can get it to move forward autonomously for as long as I want…that’s about it. How can I code simple autonomous, like going in a box?

Are you using the RobotDrive feature or no?

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.

Yes, I’m using RobotDrive.

Thank you for the sample code!

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.