Programming Pneumatics

I have to program 2 pistons and i’m having a hard time understanding how to do that.:confused:

First you need to learn how to program four solenoids. One for extending and one for retracting each.

Would this be correct? (Please don’t steal)

/----------------------------------------------------------------------------/
/* Copyright © FIRST 2008. All Rights Reserved. /
/
Open Source Software - may be modified and shared by FRC teams. The code /
/
must be accompanied by the FIRST BSD license file in the root directory of /
/
the project. /
/
----------------------------------------------------------------------------*/

package edu.wpi.first.wpilibj.templates;

import edu.wpi.first.wpilibj.Compressor;
import edu.wpi.first.wpilibj.Joystick;
import edu.wpi.first.wpilibj.RobotDrive;
import edu.wpi.first.wpilibj.SimpleRobot;
import edu.wpi.first.wpilibj.Solenoid;
import edu.wpi.first.wpilibj.Timer;

/**

  • The VM is configured to automatically run this class, and to call the
  • functions corresponding to each mode, as described in the SimpleRobot
  • 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 TheReaper extends SimpleRobot {
    RobotDrive drive = new RobotDrive(1, 2);
    Joystick leftStick = new Joystick(1);
    Joystick rightStick = new Joystick(2);
    Joystick miscStick = new Joystick(3);
    Compressor mainCompressor = new Compressor(1,2);
    Solenoid piston1extract = new Solenoid(1);
    Solenoid piston1retract = new Solenoid(2);
    Solenoid piston2extract = new Solenoid(3);
    Solenoid piston2retract = new Solenoid(4);

public void robotinit() {
mainCompressor.start();
}

/**
 * This function is called once each time the robot enters autonomous mode.
 */
public void autonomous() {
    
}

/**
 * This function is called once each time the robot enters operator control.
 */
public void operatorControl() {

while (isOperatorControl() && isEnabled()){

drive.tankDrive(-leftStick.getY(), -rightStick.getY());
Timer.delay(0.01);
if(miscStick.getRawButton(3)){
piston1extract.set(true);
piston1retract.set(false);
}else if(miscStick.getRawButton(4)){
piston1extract.set(false);
piston1retract.set(true);
}if(miscStick.getRawButton(7)){
piston2extract.set(true);
piston2retract.set(false);
}else if(miscStick.getRawButton(8)){
piston2extract.set(false);
piston2retract.set(true);
}else{
piston1extract.set(false);
piston1retract.set(false);
piston2extract.set(false);
piston2retract.set(false);
}
}

}

/**
 * This function is called once each time the robot enters test mode.
 */
public void test() {

}

}

move the if off of the brackets.

so its

}
if(){
}

you have it set up

}if(){
}

which gives the false illusion of an else statement. anyway, that wont work for piston 1 because it imminently gets de-fired if piston 2 isnt being fired / retracted.

also, you have no compressor regulator

Logically, sort of. First, try to put your code into code blocks. It makes your code look nice :stuck_out_tongue: They look like [code ] put your code here [/code ] without the spaces after them. Follow the above suggestions as well.

            else
            {
                piston1extract.set (false);
                piston1retract.set (false);
                piston2extract.set (false);
                piston2retract.set (false);
            }

The above code has a logic error. When not in operation, the pneumatic cylinder should be retracted, so the solenoid that is connected to the forward most valve on the cylinder (the one closest to the functioning end) is enabled while the other is disabled. The code should look sort of like this (which is C++)


else
{
        Reverse2->Set(1);
	Reverse->Set(1);
        Forward2->Set(0);
	Forward->Set(0);
}

Here’s some pseudo code / C++ that demonstrates some basic logic:


if (Button1)
{
	Forward->Set(1);
	Reverse->Set(0);
	Wait(0.1);
}
else if (!Button1)
{
        Forward->Set(0);
	Reverse->Set(1);
	Wait(0.1);

}

It’s pretty much the same for both languages