Driver Station Log Errors

Every time that we run the code we enable the robot and then it disables and displays the error :
ERROR Unhandled exception: edu.wpi.first.wpilibj.util.AllocationException: PWM channel 4 is already allocated at [edu.wpi.first.wpilibj.PWM.initPWM(PWM.java:126), edu.wpi.first.wpilibj.PWM.<init>(PWM.java:145), edu.wpi.first.wpilibj.SafePWM.<init>(SafePWM.java:33), edu.wpi.first.wpilibj.Jaguar.<init>(Jaguar.java:48), org.usfirst.frc.team4284.robot.Robot.teleopPeriodic(Robot.java:68), edu.wpi.first.wpilibj.IterativeRobot.startCompetition(IterativeRobot.java:150), edu.wpi.first.wpilibj.RobotBase.main(RobotBase.java:234)]

We had a jaguar plugged into port 4 and then we un plugged it and it sill displays that error.

The error is related to your software, not the hardware configuration. Line 68 of your robot.java is creating a new Jaguar object on PWM 4. However, somewhere earlier in your code, you already created an object that is using PWM 4.

If you post your code, we could give more specific answers.

I tried changing the input and i still got this error

ERROR Unhandled exception: edu.wpi.first.wpilibj.util.AllocationException: PWM channel 4 is already allocated at [edu.wpi.first.wpilibj.PWM.initPWM(PWM.java:126), edu.wpi.first.wpilibj.PWM.<init>(PWM.java:145), edu.wpi.first.wpilibj.SafePWM.<init>(SafePWM.java:33), edu.wpi.first.wpilibj.Jaguar.<init>(Jaguar.java:48), org.usfirst.frc.team4284.robot.Robot.teleopPeriodic(Robot.java:68), edu.wpi.first.wpilibj.IterativeRobot.startCompetition(IterativeRobot.java:150), edu.wpi.first.wpilibj.RobotBase.main(RobotBase.java:234)]

If it helps heres my code

package org.usfirst.frc.team4284.robot;

import edu.wpi.first.wpilibj.IterativeRobot;
import edu.wpi.first.wpilibj.Joystick;
import edu.wpi.first.wpilibj.RobotDrive;
import edu.wpi.first.wpilibj.Jaguar;
import edu.wpi.first.wpilibj.livewindow.LiveWindow;

/**

  • The VM is configured to automatically run this class, and to call the

  • functions corresponding to each mode, as described in the IterativeRobot

  • documentation. If you change the name of this class or the package after

  • creating this project, you must also update the manifest file in the resource

  • directory.
    */
    public class Robot extends IterativeRobot {
    RobotDrive Drive;
    Joystick drivestick;
    int autoLoopCounter;

    /**

    • This function is run when the robot is first started up and should be
    • used for any initialization code.
      */
      public void robotInit() {
      Jaguar FL = new Jaguar (0);
      Jaguar BL = new Jaguar (1);
      Jaguar FR = new Jaguar (2);
      Jaguar BR = new Jaguar (3);
      Drive = new RobotDrive(FL,BL,FR,BR);
      drivestick = new Joystick(0);
      }

    /**

    • This function is run once each time the robot enters autonomous mode
      */
      public void autonomousInit() {
      autoLoopCounter = 0;
      }

    /**

    • This function is called periodically during autonomous
      */
      public void autonomousPeriodic() {
      if(autoLoopCounter < 100) //Check if we’ve completed 100 loops (approximately 2 seconds)
      {
      Drive.drive(-0.5, 0.0); // drive forwards half speed
      autoLoopCounter++;
      } else {
      Drive.drive(0.0, 0.0); // stop robot
      }
      }

    /**

    • This function is called once each time the robot enters tele-operated mode
      */
      public void teleopInit(){

      }

    /**

    • This function is called periodically during operator control
      */
      public void teleopPeriodic() {
      Drive.arcadeDrive(drivestick);

      {
      Jaguar leftArm = new Jaguar(5);
      Jaguar rightArm = new Jaguar(6);
      /* Jaguar retract = new Jaguar(7); */

       if (drivestick.getRawButton(4)) 
       	leftArm.set (-1);
       	rightArm.set (1);
      
       	try {
       	    Thread.sleep(500);            //stop for 1/2 second
       	} catch(InterruptedException ex) {             // allows for interruption of the sleep period
       	    Thread.currentThread().interrupt();
       	}         
             leftArm.set(0.0);
             rightArm.set(0.0);
      
       if (drivestick.getRawButton(5))
       	leftArm.set(1);
       	rightArm.set(-1);
       	
       	try {
       	    Thread.sleep(500);                 
       	} catch(InterruptedException ex) {
       	    Thread.currentThread().interrupt();
       	}    		
       	leftArm.set(0.0);
       	rightArm.set(0.0);
       	 
       	
       	/* if(drivestick.getRawButton(8))
       	retract.set(1);
       	try {
       	    Thread.sleep(1000);                 //1000 milliseconds is one second.
       	} catch(InterruptedException ex) {
       	    Thread.currentThread().interrupt();
       	}
       	retract(0.0);
      
       	if(drivestick.getRawButton(9))
       		retract.set(-1);
       	
       	try {
       	    Thread.sleep(1000);                 //1000 milliseconds is one second.
       	} catch(InterruptedException ex) {
       	    Thread.currentThread().interrupt();
       	}
       	retract(0.0);
       	*/
      

      }

    }

    /**

    • This function is called periodically during test mode
      */
      public void testPeriodic() {
      LiveWindow.run();
      }

}

After changing the input locations i still get this error

ERROR Unhandled exception: edu.wpi.first.wpilibj.util.AllocationException: PWM channel 5 is already allocated at [edu.wpi.first.wpilibj.PWM.initPWM(PWM.java:126), edu.wpi.first.wpilibj.PWM.<init>(PWM.java:145), edu.wpi.first.wpilibj.SafePWM.<init>(SafePWM.java:33), edu.wpi.first.wpilibj.Jaguar.<init>(Jaguar.java:48), org.usfirst.frc.team4284.robot.Robot.teleopPeriodic(Robot.java:68), edu.wpi.first.wpilibj.IterativeRobot.startCompetition(IterativeRobot.java:150), edu.wpi.first.wpilibj.RobotBase.main(RobotBase.java:234)]

heres the section of code it refers to

    Jaguar leftArm  = new Jaguar(1);
    Jaguar rightArm = new Jaguar(2);
    Jaguar retract  = new Jaguar(3); 
    
    if (drivestick.getRawButton(4)) 
		leftArm.set (-1);
		rightArm.set (1);

		try {
		    Thread.sleep(500);            //stop for 1/2 second
		} catch(InterruptedException ex) {             // allows for interruption of the sleep period
		    Thread.currentThread().interrupt();
		}         
          leftArm.set(0);
          rightArm.set(0);

	if (drivestick.getRawButton(5))
		leftArm.set(1);
		rightArm.set(-1);
		
		try {
		    Thread.sleep(500);                 
		} catch(InterruptedException ex) {
		    Thread.currentThread().interrupt();
		}    		
		leftArm.set(0);
		rightArm.set(0);
		 
		
		 if(drivestick.getRawButton(8)) 
		retract.set(1);
		try {
		    Thread.sleep(1000);                 //1000 milliseconds is one second.
		} catch(InterruptedException ex) {
		    Thread.currentThread().interrupt();
		}
		retract.set(0);
		 
		if(drivestick.getRawButton(9))
			retract.set(-1);
		
		try {
		    Thread.sleep(1000);                 //1000 milliseconds is one second.
		} catch(InterruptedException ex) {
		    Thread.currentThread().interrupt();
		}
		retract.set(0);

You don’t want to be instantiating your motor controllers inside of the teleopPeriodic method. That needs done in robotInit().

Also, please use code tags to make your code easier yo read in a forum setting.

Yes. Instantiating your motor controllers in the periodic function makes it try to create another object each time it is called. So the second time it is called it is creating another object attached to the same PWM. You should do the object creation in the constructor.