public void RunToPosition() { while (StepperX.Run() || StepperY.Run()) { ; } }
public void ResetMotorParameters() { StepperX.SetMaxSpeed(Config.MOTOR_X_MAX_SPEED); StepperY.SetMaxSpeed(Config.MOTOR_Y_MAX_SPEED); StepperX.SetAcceleration(Config.MOTOR_X_ACCELERATION); StepperY.SetAcceleration(Config.MOTOR_Y_ACCELERATION); }
public void MoveStraightToOffset(Point offset) { ResetMotorParameters(); float diffX = (float)Math.Abs(StepperX.CurrentPosition() - offset.X); float diffY = (float)Math.Abs(StepperY.CurrentPosition() - offset.Y); if (diffX > 0 && diffY > 0) { float newAccelY = Config.MOTOR_Y_ACCELERATION; float newAccelX = Config.MOTOR_X_ACCELERATION; long minMaxSpeed = (long)Math.Min(Config.MOTOR_X_MAX_SPEED, Config.MOTOR_Y_MAX_SPEED); StepperX.SetMaxSpeed(minMaxSpeed); StepperY.SetMaxSpeed(minMaxSpeed); // We need to move more in the X direction than Y, so Y accel will be slower than X accel if (diffX > diffY) { if (Config.MOTOR_Y_ACCELERATION < Config.MOTOR_X_ACCELERATION) { newAccelY = diffY / diffX * Config.MOTOR_X_ACCELERATION; if (newAccelY > Config.MOTOR_Y_ACCELERATION) { newAccelX = Config.MOTOR_X_ACCELERATION * (Config.MOTOR_Y_ACCELERATION / newAccelY); newAccelY = Config.MOTOR_Y_ACCELERATION; } } else { newAccelY = diffY / diffX * Config.MOTOR_X_ACCELERATION; newAccelX = Config.MOTOR_X_ACCELERATION; } } // We need to move more in the Y direction, so X accel will be slower than Y accel else { if (Config.MOTOR_Y_ACCELERATION < Config.MOTOR_X_ACCELERATION) { newAccelX = diffX / diffY * Config.MOTOR_Y_ACCELERATION; newAccelY = Config.MOTOR_Y_ACCELERATION; } else { newAccelX = diffX / diffY * Config.MOTOR_Y_ACCELERATION; if (newAccelX > Config.MOTOR_X_ACCELERATION) { newAccelY = Config.MOTOR_Y_ACCELERATION * (Config.MOTOR_X_ACCELERATION / newAccelX); newAccelX = Config.MOTOR_X_ACCELERATION; } } } StepperX.SetAcceleration(newAccelX); StepperY.SetAcceleration(newAccelY); } MoveToOffset(offset); }
private void LimitSwitchPin_Y1_ValueChanged(GpioPin sender, GpioPinValueChangedEventArgs args) { // At Y0 if (args.Edge == GpioPinEdge.FallingEdge) { StepperY.SetCurrentPosition(0); } }
private void LimitSwitchPin_Y2_ValueChanged(GpioPin sender, GpioPinValueChangedEventArgs args) { // At YMax if (args.Edge == GpioPinEdge.FallingEdge) { StepperY.SetCurrentPosition(Config.MAX_MALLET_OFFSET_Y); } }
public void MoveMotorsToZero() { stop = false; long moveSpeed = (long)Config.DEFAULT_MOVE_SPEED; StepperX.Speed = moveSpeed; StepperY.Speed = moveSpeed; while (LimitSwitchPin_X1.Read() == GpioPinValue.High || LimitSwitchPin_Y1.Read() == GpioPinValue.High) { if (LimitSwitchPin_X1.Read() == GpioPinValue.High) { StepperX.Move(-10); StepperX.RunSpeed(); } if (LimitSwitchPin_Y1.Read() == GpioPinValue.High) { StepperY.Move(-10); StepperY.RunSpeed(); } if (stop) { return; } } StepperX.SetCurrentPosition(0); StepperY.SetCurrentPosition(0); LimitSwitchPin_X1.ValueChanged += LimitSwitchPin_X1_ValueChanged; LimitSwitchPin_X2.ValueChanged += LimitSwitchPin_X2_ValueChanged; LimitSwitchPin_Y1.ValueChanged += LimitSwitchPin_Y1_ValueChanged; LimitSwitchPin_Y2.ValueChanged += LimitSwitchPin_Y2_ValueChanged; }
public void MoveToOffset(Point offset) { StepperX.MoveTo((long)offset.X); StepperY.MoveTo((long)offset.Y); }
public Point GetOffsets() { return(new Point(StepperX.CurrentPosition(), StepperY.CurrentPosition())); }