View Single Post
  #2   Spotlight this post!  
Unread 22-02-2011, 13:55
Alan Anderson's Avatar
Alan Anderson Alan Anderson is offline
Software Architect
FRC #0045 (TechnoKats)
Team Role: Mentor
 
Join Date: Feb 2004
Rookie Year: 2004
Location: Kokomo, Indiana
Posts: 9,112
Alan Anderson has a reputation beyond reputeAlan Anderson has a reputation beyond reputeAlan Anderson has a reputation beyond reputeAlan Anderson has a reputation beyond reputeAlan Anderson has a reputation beyond reputeAlan Anderson has a reputation beyond reputeAlan Anderson has a reputation beyond reputeAlan Anderson has a reputation beyond reputeAlan Anderson has a reputation beyond reputeAlan Anderson has a reputation beyond reputeAlan Anderson has a reputation beyond repute
Re: limit switch problem

Quote:
Originally Posted by Straberrie View Post
From what I understand, you just want your motor to stop if it reaches any of the above. Your code seems a little too complex for something that should really only be a few lines.
If the motor is forced to stop whenever a limit switch is pressed, it will stick at the end of its travel and never be able to leave.

One easy way to do it "right" is to use the "top limit" switch to turn off the motor only if it's being commanded up, and use the "bottom limit" switch to turn off the motor only if it's being commanded down.

Code:
  // use operator console buttons to decide which way to run the motor
  if (ds->GetDigitalIn(3) != 1)
    motorvalue = 1;
  else if (ds->GetDigitalIn(4) != 1)
    motorvalue = -1;
  else
    motorvalue = 0;
  // stop motor from being commanded forward if at lower limit
  if (Carriage_down->Get() == 0 &&  motorvalue > 0)
    motorvalue = 0;
  // stop motor from being commanded backward if at upper limit
  if (Carriage_up->Get() == 0 && motorvalue < 0)
    motorvalue = 0;
  Carriage_motor->Set(motorvalue);
Reply With Quote