View Single Post
  #46   Spotlight this post!  
Unread 07-02-2015, 10:33
curtis0gj curtis0gj is offline
Registered User
FRC #5033 (Beavertronics)
Team Role: Programmer
 
Join Date: Jan 2015
Rookie Year: 2015
Location: Canada
Posts: 121
curtis0gj will become famous soon enough
Re: Limit Swtich Help

Quote:
Originally Posted by Jon Stratis View Post
While the brake setting will help, it may not be your issue. It depends on what, exactly, the behavior is.

Take a look at this portion of the code:
Code:
   
         if(limitPressed || limitPressed2 == false || limitPressed3 == false || limitPressed4 == false) {
            	victor1.set(0);
            	victor2.set(0);
            } else if (-leftaxis > 0.5) {
            	victor1.set(1);
            	victor2.set(1);
            } else {
            	victor1.set(0);
            	victor2.set(0);
            }
            if(leftaxis > 0.5) {
            	victor1.set(-1);
            	victor2.set(-1);
            } else {
            	victor1.set(0);
            	victor2.set(0);
            }

There are two if/else blocks here. The first one controls going up, the second going down, I assume. However, your limit switch at the bottom of the lead screw is being checked in the first if statement. What this may be doing is telling your motors to stop in the first if statement, then in the second telling them to go down. So you end up with a fast oscillation between stop and down.

When I'm working with a motor, I try to combine all control of the motor into a single if/else block, or in a single set command, just to make sure I don't get into a situation where I'm telling it two different things every loop through.

For this situation, I might do something like:
Code:
if (operator says to go up AND I haven't hit the top limit switch yet)
{
  go up
}
else if (operator says to go down AND I haven't hit the bottom limit switch yet)
{
  go down
}
else
{
  stop
}
Obviously, that's pseudocode... its up to you to figure out how to translate that to real code

Also, check the third and fourth limit switches... your comments say they are for controlling left to right motion of the gripper, but in your code they're set up to work with the up/down motion of the elevator. Are you controlling the left/right motion with the relays? If so, you'll want to work those into the if/else block that deals with the relays!
Okay so if I remember correctly I can use && for and so could I do something like this?
Code:
if(-axis > 0.5 && limitPressed2 == true) { //I am using true because the limit switch is off when open and on when closed
     victor1.set(1);
     victor2.set(1);
} else if(axis > 0.5 && limitPressed == false) {
     victor1.set(-1);
     victor2.set(-1);
}else {
     victor1.set(0);
     victor2.set(0);
} if(xbox.getRawButton(4) && limitPressed3 == true) {
     spike1.set(Relay.Value.kForward);
     spike2.set(Relay.Value.kForward);
} else if(xbox.getRawButton(1) && limitPressed 4 == true) {
     spike1.set(Relay.Value.kReverse);
     spike2.set(Relay.Value.kReverse); 
} else {
     spike1.set(Relay.Value.kOff);
     spike1.set(Relay.Value.kOff);
}

Last edited by curtis0gj : 07-02-2015 at 12:37.
Reply With Quote