|
|
|
![]() |
|
|||||||
|
||||||||
![]() |
|
|
Thread Tools | Rate Thread | Display Modes |
|
|
|
#1
|
||||
|
||||
|
Re: Solenoid Code Does Not Work!
You posted long code without indentation. Use the "#" button the next time. I didn't look through the entire code because of the readability but for the first mistake, you were creating six solenoids on the same DO channel (channel 1)???
|
|
#2
|
|||
|
|||
|
Re: Solenoid Code Does Not Work!
well, thats embarrasing... sorry
also, thanks for the tip on posting code Edit: if i repost the code with proper format would you mind giving it a look over for any other obvious mistakes? Last edited by superstretch : 22-02-2010 at 19:01. |
|
#3
|
|||
|
|||
|
Re: Solenoid Code Does Not Work!
I suppose that also explains the error:
Quote:
|
|
#4
|
|||
|
|||
|
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);
|
|
#5
|
||||
|
||||
|
Re: Solenoid Code Does Not Work!
Assuming your code is reflecting the connection of channels accurately, the code looks find. However, without knowing what the solenoid configurations are, I would guess there is one more mistake.
Code:
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); <<< Should this be s3??? //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
}
|
|
#6
|
|||
|
|||
|
Re: Solenoid Code Does Not Work!
ooh, nice catch, thank you.
Gah still 12hours till i can test my code again! |
|
#7
|
||||
|
||||
|
Re: Solenoid Code Does Not Work!
also, one of the simplest ways to mess up that pneumatics board is double checking that it's in slot 8 on the CRIO and using the constructor that specifies slot as well as channel, for code clarity mostly.
|
|
#8
|
||||
|
||||
|
Re: Solenoid Code Does Not Work!
Yep.
|
![]() |
| Thread Tools | |
| Display Modes | Rate This Thread |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Solenoid code not working | ssmith2 | NI LabVIEW | 6 | 03-02-2010 10:11 |
| Eclipse does not work | jasonpeinko | Programming | 7 | 22-02-2008 09:51 |
| Autonomous mode does not work | Sunny | Programming | 9 | 16-01-2008 15:31 |
| Arcade Mode (12) does NOT work | jakk | Programming | 2 | 10-07-2006 19:27 |
| Chaos theory does not work!!!!! | S9ar7acu3 | General Forum | 3 | 09-02-2003 11:46 |