Go to Post What I am expecting is the unexpected (what that is I don't know). - mdiradoorian [more]
Home
Go Back   Chief Delphi > Technical > Programming > Java
CD-Media   CD-Spy  
portal register members calendar search Today's Posts Mark Forums Read FAQ rules

 
 
 
Thread Tools Rate Thread Display Modes
Prev Previous Post   Next Post Next
  #42   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
 


Thread Tools
Display Modes Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump


All times are GMT -5. The time now is 13:09.

The Chief Delphi Forums are sponsored by Innovation First International, Inc.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Copyright © Chief Delphi