|
|
|
![]() |
|
|||||||
|
||||||||
![]() |
| Thread Tools | Rate Thread | Display Modes |
|
#1
|
||||
|
||||
|
Hello with the help of Youtube and CD I was finally able to make my first java program for the robot.
Here it is: The main class: Code:
// ***************** THIS CODE WAS WRITTEN BY BILAL MAJEED ***************** //
package bilal.robotics.code;
// ***************** TO BE USED COMPONENTS ***************** //
import edu.wpi.first.wpilibj.IterativeRobot;
import edu.wpi.first.wpilibj.RobotDrive;
import edu.wpi.first.wpilibj.Jaguar;
import edu.wpi.first.wpilibj.Joystick;
import edu.wpi.first.wpilibj.Timer;
public class Team2185Main extends IterativeRobot {
Jaguar leftMotor1 = new Jaguar(1); // define the 1st left motor
Jaguar leftMotor2 = new Jaguar(2); // define the 2nd left motor
Jaguar rightMotor1 = new Jaguar(3); // define the 1st right motor
Jaguar rightMotor2 = new Jaguar(4); // define the 2nd right motor
RobotDrive drive = new RobotDrive (leftMotor1, leftMotor2, rightMotor1, rightMotor2); // define the robot drive system
Joystick controller = new Joystick(1); // define the joystick as controller
final int buttonA = 1; // define button 1 as buttonA
Shooter shooter;
// ***************** INITIALIZATION CODE ***************** //
public void robotInit()
{
shooter = new Shooter(); // call the shooter class
}
// ***************** AUTONOMOUS METHODS ***************** //
public void autonomousInit()
{
for(int i=0; i<4; i++){
drive.drive(0.5,0.0); // drive forward at 1/2 speed
Timer.delay(2.0); // wait 2 sec
drive.drive(0.0, 0.75); // drive with 0% speed and 75% turn
Timer.delay(0.75); // wait for the 90 degree turn to complete
}
drive.drive(0.0,0.0);
}
public void autonomousPeriodic()
{
}
public void autonomousContinuous()
{
}
// ***************** TELOP METHODS ***************** //
public void teleopInit()
{
while(isOperatorControl() && isEnabled())
{
drive.tankDrive(controller, 2, controller, 5); // drive the robot according to joystick
if (controller.getRawButton(buttonA)) // if button 1 is pressed on the controller
{ // then make the robot drive forward
leftMotor1.set(1);
leftMotor2.set(1);
rightMotor1.set(1);
rightMotor2.set(1);
}
}
}
public void telopPeriodic()
{
shooter.shoot(); // every 20mS call the shooting class
}
public void telopContinuous()
{
}
// ***************** DISABLED METHODS ***************** //
public void disabledInit()
{
}
public void disabledPeriodic()
{
}
public void disabledContinuous()
{
}
}
Code:
package bilal.robotics.code;
import edu.wpi.first.wpilibj.Jaguar;
import edu.wpi.first.wpilibj.Joystick;
import edu.wpi.first.wpilibj.Joystick.ButtonType;
public class Shooter
{
Jaguar shooter = new Jaguar(5);
Joystick controller = new Joystick(2);
final int buttonA = 1;
public Shooter()
{
}
public void shoot(){
if(controller.getRawButton(buttonA)) {
shooter.set(controller.getRawAxis(2));
}
}
}
Thanks Also how would i deploy this code on to the robot. Thanks |
|
#2
|
|||
|
|||
|
Re: Code and Deployment Help
I'm assuming that you are using netbeans, and that all your constants/fields are correct. I can't really diagnose problems from here without seeing your setup.
The only issue I see in your code is that your teleopPeriodic might never get called, because of your infinite loop in your teleopInit. I would suggest moving just your driving code (not the loop) to your teleopPeriodic. For future reference, avoid loops unless they are escapable. As for deploying, make sure your computer can communicate with your cRIO (ping it), and then push the "green arrow" or push "F6" or go to the "run" menu and select "run main project". Good Luck! |
|
#3
|
||||
|
||||
|
Thank you for the help, I made the adjustments to the code as you instructed and this is how it looks like:
Code:
package bilal.eci.code.robotics;
import edu.wpi.first.wpilibj.IterativeRobot;
import edu.wpi.first.wpilibj.RobotDrive;
import edu.wpi.first.wpilibj.Jaguar;
import edu.wpi.first.wpilibj.Joystick;
import edu.wpi.first.wpilibj.Timer;
public class ExhibtionMainClass extends IterativeRobot {
Jaguar leftMotor1 = new Jaguar(1); // define the 1st left motor
Jaguar leftMotor2 = new Jaguar(2); // define the 2nd left motor
Jaguar rightMotor1 = new Jaguar(3); // define the 1st right motor
Jaguar rightMotor2 = new Jaguar(4); // define the 2nd right motor
RobotDrive drive = new RobotDrive (leftMotor1, leftMotor2, rightMotor1, rightMotor2); // define the robot drive system
Joystick controller = new Joystick(1);
public void robotInit() {
}
public void autonomousInit() {
for(int i=0; i<4; i++){
drive.drive(0.5,0.0); // drive forward at 1/2 speed
Timer.delay(2.0); // wait 2 sec
drive.drive(0.0, 0.75); // drive with 0% speed and 75% turn
Timer.delay(0.75); // wait for the 90 degree turn to complete
}
}
public void autonomousContinuous() {
}
public void autonomousPeriodic() {
}
public void telopInit(){
while(isOperatorControl() && isEnabled())
{
}
}
public void telopContinuous() {
}
public void teleopPeriodic() {
drive.tankDrive(controller, 2, controller, 5); // drive the robot according to joystick
}
public void disabledInit() {
drive.drive(0.0,0.0);
}
public void disabledPeriodic() {
}
public void disabledContinuous() {
}
}
ps. I deleted the use of the button and i also deleted the shooter class Last edited by 2185Bilal : 06-15-2012 at 08:01 PM. Reason: to add additional info |
|
#4
|
||||
|
||||
|
Re: Code and Deployment Help
There are a few things that I see in your code: empty statements (not a bad thing to have, but very superfluous) and an infinite loop (definitely a bad thing).
The code you posted looks like this; I added the comments. Quote:
You have an infinite loop in teleopInit(), so your program will never progress beyond that because it is always enabled and under operator control during teleop. If you're not going to do anything with a method, leave it out entirely - this goes for the robotInit(), autonomousPeriodic(), autonomousContinuous(), teleopInit(), and teleopContinuous() methods in the code you posted. Better code would look like this: Code:
package bilal.eci.code.robotics;
import edu.wpi.first.wpilibj.IterativeRobot;
import edu.wpi.first.wpilibj.RobotDrive;
import edu.wpi.first.wpilibj.Jaguar;
import edu.wpi.first.wpilibj.Joystick;
import edu.wpi.first.wpilibj.Timer;
public class ExhibitionMainClass extends IterativeRobot {
Jaguar leftMotor1 = new Jaguar(1);
Jaguar leftMotor2 = new Jaguar(2);
Jaguar rightMotor1 = new Jaguar(3);
Jaguar rightMotor2 = new Jaguar(4);
RobotDrive drive = new RobotDrive (leftMotor1, leftMotor2, rightMotor1, rightMotor2); // define the robot drive system
Joystick controller = new Joystick(1);
public void autonomousInit() {
for(int i=0; i<4; i++){
drive.drive(0.5,0.0); //drive forward at 1/2 speed
Timer.delay(2.0); //wait 2 sec
drive.drive(0.0, 0.75); //drive with 0% speed and 75% turn
Timer.delay(0.75); //wait for the 90 degree turn to complete
}
}
public void teleopPeriodic() {
drive.tankDrive(controller, 2, controller, 5); // drive the robot according to joystick
}
public void disabledInit() {
drive.drive(0.0,0.0);
}
}
|
|
#5
|
||||
|
||||
|
Quote:
ps. I pretty new to Java, and i think "final" is like a variable type (string, integer), so could you please tell what is a final. Thanks |
|
#6
|
||||
|
||||
|
Re: Code and Deployment Help
Quote:
For example: Code:
Jaguar jaguar = new Jaguar(1);
jagaur = new Jaguar(2);
void changeJag(){
jaguar = new Jaguar(3);
}
Code:
final Jaguar jaguar = new Jaguar(1);
jaguar = new Jaguar(2);
void changeJag(){
jaguar = new Jaguar(3);
}
|
|
#7
|
||||
|
||||
|
WOW...thank you very much
So i have made the adjustments you told me to, and here how it looks like: Code:
// This code was created on Friday June 15, 2012 by Bilal Majeed
// This code is meant to be used on the exhibtion robot
package bilal.eci.code.robotics;
// OBJECTS //
import edu.wpi.first.wpilibj.IterativeRobot;
import edu.wpi.first.wpilibj.RobotDrive;
import edu.wpi.first.wpilibj.Jaguar;
import edu.wpi.first.wpilibj.Joystick;
import edu.wpi.first.wpilibj.Timer;
// ROBOT CODE (AUTONOMOUS AND TELOP) //
public class ExhibtionMainClass extends IterativeRobot {
// DEFINING THE JAGUARS //
final Jaguar leftMotor1 = new Jaguar(1);
final Jaguar leftMotor2 = new Jaguar(2);
final Jaguar rightMotor1 = new Jaguar(3);
final Jaguar rightMotor2 = new Jaguar(4);
// DEFINING THE ROBOT DRIVE SYSTEM (4 WHEEL, TANK DRIVE) //
final RobotDrive drive = new RobotDrive (leftMotor1, leftMotor2, rightMotor1, rightMotor2);
// DEFINING THE JOYSTICK (USB1) //
final Joystick controller = new Joystick(1);
// AUTONOMOUS CODE //
public void autonomousInit() {
for(int i=0; i<4; i++){
drive.drive(0.5,0.0);
Timer.delay(2.0);
drive.drive(0.0, 0.75);
Timer.delay(0.75);
}
}
// TELOPERATED PERIOD CODE //
public void teleopPeriodic() {
drive.tankDrive(controller, 2, controller, 5);
}
// DISABLED ROBOT CODE //
public void disabledInit() {
drive.drive(0.0,0.0);
}
}
Let me know if i did anything wrong or differently, and also any tips or advice will be greatly appreciated, thank you ![]() |
|
#8
|
|||
|
|||
|
Re: Code and Deployment Help
looks good. In the future, when you write your own classes where things might change, you will not need to use the "final" keyword. I usually only use it for variables where I am sure nothing will change.
|
![]() |
| Thread Tools | |
| Display Modes | Rate This Thread |
|
|