View Single Post
  #4   Spotlight this post!  
Unread 22-02-2010, 19:10
superstretch superstretch is offline
Registered User
FRC #0417
 
Join Date: Feb 2010
Location: Mt Sinai
Posts: 7
superstretch is an unknown quantity at this point
Re: Solenoid Code Does Not Work!

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
Reply With Quote