My code with formatting preserved:
Code:
#include "WPILib.h"
/**
* This is a demo program showing the use of the RobotBase class.
* The SimpleRobot class is the base of a robot application that will automatically call your
* Autonomous and OperatorControl methods at the right time as controlled by the switches on
* the driver station or the field controls.
*/
class MyCode : public SimpleRobot
{
RobotDrive *myRobot; // robot drive system pointer
Joystick *stick; // arcade drive joystick pointer
DriverStation *ds; // driver station object
Solenoid *s1;
Solenoid *s2;
Solenoid *s3;
Solenoid *s4;
Solenoid *s5;
Solenoid *s6;
Compressor *c;
bool btn1state;
bool btn2state;
bool btn6state;
bool btn7state;
bool quickReleaseState;
bool resetPistonState;
public:
/**
*
*
* Constructor for this robot subclass.
* Create an instance of a RobotDrive with left and right motors plugged into PWM
* ports 1 and 2 on the first digital module.
*/
MyCode(void)
{
ds = DriverStation::GetInstance();
myRobot = new RobotDrive(1, 2); // create robot drive base
stick = new Joystick(1); // create the joystick
s1 = new Solenoid(1); // allocate the Solenoid objects
s2 = new Solenoid(2);
s3 = new Solenoid(3);
s4 = new Solenoid(4);
s5 = new Solenoid(5);
s6 = new Solenoid(6);
c = new Compressor(1,1);
c->Start();
GetWatchdog().SetExpiration(5.0);
//AxisCamera &myCamera = AxisCamera::getInstance();
}
/**
* Drive left & right motors for 2 seconds, enabled by a jumper (jumper
* must be in for autonomous to operate).
*/
void Autonomous(void)
{
GetWatchdog().SetEnabled(false);
for (int j = 0; j<3; j++)
{
// myRobot->Drive(0.5, 0.0); // drive forwards half speed
s1->Set(true); //activate quick release retract
Wait(1.0);
s1->Set(false); //for 2 seconds
s3->Set(true); //activate reset piston extend
Wait(1.0);
s3->Set(false);
s2->Set(true); //activate quick release piston extend
Wait(1.0);
s2->Set(false);
s4->Set(true); //activate reset piston retract
Wait(1.0);
s4->Set(false);
}
myRobot->Drive(0.0, 0.0); // stop robot
GetWatchdog().SetEnabled(true);
}
/**
* Runs the motors under driver control with either tank or arcade steering selected
* by a jumper in DS Digin 0. Also an arm will operate based on a joystick Y-axis.
*/
void OperatorControl(void)
{
btn1state = 0;
btn2state = 0;
btn6state = 0;
btn7state = 0;
quickReleaseState = 1; //quick release piston is extended
resetPistonState = 0; //reset pistion is retracted
while (IsOperatorControl())
{
GetWatchdog().Feed();
myRobot->ArcadeDrive(stick); // drive with arcade style
if (stick->GetRawButton(1) && !btn1state) //button is pressed but not being held
{
btn1state = 1; //button is being pressed
s1->Set(true); //activate quick release retract
Wait(1.0); //for 2 seconds
s1->Set(false); //reset state
s1->Set(true); //activate reset piston extend
Wait(1.0);
s3->Set(false); //restet state
s2->Set(true); //activate quick release piston extend
Wait(1.0);
s2->Set(false); //reset state
s4->Set(true); //activate reset piston retract
Wait(1.0);
s4->Set(false); //reset state
}
else if(!stick->GetRawButton(1) && btn1state) //button is not being pressed
{
btn1state = 0; //reset state
}
if (stick->GetRawButton(6) && !btn6state)
{
btn6state = 1;
if (quickReleaseState)
{
s2->Set(false);
s1->Set(true); //activate quick release retract
quickReleaseState = 0; //quick release piston is retracted
}
else
{
s1->Set(false);
s2->Set(true); //activate quick release extend
quickReleaseState = 1; //quick release piston is extended
}
}
else if(!stick->GetRawButton(6) && btn6state) //button is not being pressed
{
btn6state = 0; //reset state
}
if (stick->GetRawButton(7) && !btn7state)
{
btn7state = 1;
if (!resetPistonState)
{
s4->Set(false);
s3->Set(true); //activate reset extend
resetPistonState = 1; //reset piston is extended
}
else
{
s3->Set(false);
s4->Set(true); //activate reset retract
resetPistonState = 0; //reset piston is retracted
}
}
else if(!stick->GetRawButton(7) && btn7state) //button is not being pressed
{
btn7state = 0; //reset state
}
}
}
};
START_ROBOT_CLASS(MyCode);
thanks for any and all help