How to program solenoid and compressor?

Hi, this is team 2198 and we are having trouble programming for the solenoids and compressors for java. We would appreciate any help we can receive whether it is a program or a simple guide. :stuck_out_tongue:

Thanks for reading :o

If someone has real sample code, jump in. In the mean time, there is some test code in edu.wpi.first.wpilibj.CompressorTest which is used to test WPILibJ on a special test rig.

Also, if you could give some details about the problems your seeing?

  • not sure how to get started?
  • code doesn’t compile?
  • code runs with exceptions?
  • code runs, but doesn’t do what you want?

I am not sure howto get started :ahh:

OK, there’s some solenoid example code in the DefaultCodeProject.

From NetBeans, select “File/New Project…”. In the window, open the “Samples” folder, select “FRC Java”, then “DefaultCodeProject.zip” and continue making the project from there.

Also, as I mentioned before there is some test code in WPILibJ. To see that code, select “File/Open Project…”. Navigate to your “sunspotfrcsdk” directory, then the “lib” directory under that. From there select WPILibJ.

This should give you a good idea.

package edu.wpi.first.wpilibj.templates;

import edu.wpi.first.wpilibj.Joystick;
import edu.wpi.first.wpilibj.Compressor;
import edu.wpi.first.wpilibj.Solenoid;

public class Airsystem extends SimpleRobot {
     private Joystick DriverStick;
     private AxisCamera camera;                       //defines Axis Camera
     private Solenoid s1,s2;                             //defines solenoids

     public Airsystem() {
          DriverStick = new Joystick(1);             // USB port
          airCompressor = new Compressor(1,1);  //Digtial I/O,Relay
          airCompressor.start();                        // Start the air compressor

          s1 = new Solenoid(1);                        // Solenoid port
          s2 = new Solenoid(2);
     public void autonomous() {
     }
     public void operatorControl() {
          if(DriverStick.getRawButton(1) == true)
          {
                s1.set(true);
                s2.set(false);
           }
           if(DriverStick.getRawButton(2) == true)
           {
                s1.set(false);
                s2.set(true);
            }
    }
    }

Howdy…

We had to insert this piece of code in the operatorControl() as well,

            // New compressor code...
            if (airCompressor.getPressureSwitchValue()) {
                airCompressor.setRelayValue(edu.wpi.first.wpilibj.Relay.Value.kOff);
            } else {
                airCompressor.setRelayValue(edu.wpi.first.wpilibj.Relay.Value.kOn);
            }

And don’t forget to turn the compressor off when exiting your operatorControl loop…

airCompressor.setRelayValue(edu.wpi.first.wpilibj.Relay.Value.kOff);

This is not correct, call the Compressor class tell it the digital input and the spike port and it will take care for you.

ex: Compressor myComp = new Compressor(1,1); //That’s all you need

By default, the compressor is not enabled until you call the start() method on it. This is needed in addition to the creation of a Compressor object.

Make sure to call start() on the compressor object, and also make sure that it is a class member so it does not go out of scope. Since the example code in post #5 shows no declaration for airCompressor, my best guess is that you’re creating a new one each loop.

The example should look more like this:


....
public class Airsystem extends SimpleRobot {
     private Joystick DriverStick;
     private AxisCamera camera;                       //defines Axis Camera
     private Solenoid s1,s2;                             //defines solenoids
     **private Compressor airCompressor;**

     public Airsystem() {
          DriverStick = new Joystick(1);             // USB port
          airCompressor = new Compressor(1,1);  //Digtial I/O,Relay
          airCompressor.start();                        // Start the air compressor

          s1 = new Solenoid(1);                        // Solenoid port
          s2 = new Solenoid(2);
     }
     ...

Instead of deleting your post with “Problem is now solved”, can you please tell us in case we have the same issue? We also don’t know how to program the compressor using Java.