コード例 #1
0
 public void RunToPosition()
 {
     while (StepperX.Run() || StepperY.Run())
     {
         ;
     }
 }
コード例 #2
0
ファイル: Robot.cs プロジェクト: yuki-96/DataCultureSeries
 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);
 }
コード例 #3
0
ファイル: Robot.cs プロジェクト: yuki-96/DataCultureSeries
        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);
        }
コード例 #4
0
 private void LimitSwitchPin_Y1_ValueChanged(GpioPin sender, GpioPinValueChangedEventArgs args)
 {
     // At Y0
     if (args.Edge == GpioPinEdge.FallingEdge)
     {
         StepperY.SetCurrentPosition(0);
     }
 }
コード例 #5
0
 private void LimitSwitchPin_Y2_ValueChanged(GpioPin sender, GpioPinValueChangedEventArgs args)
 {
     // At YMax
     if (args.Edge == GpioPinEdge.FallingEdge)
     {
         StepperY.SetCurrentPosition(Config.MAX_MALLET_OFFSET_Y);
     }
 }
コード例 #6
0
        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;
        }
コード例 #7
0
 public void MoveToOffset(Point offset)
 {
     StepperX.MoveTo((long)offset.X);
     StepperY.MoveTo((long)offset.Y);
 }
コード例 #8
0
ファイル: Robot.cs プロジェクト: yuki-96/DataCultureSeries
 public Point GetOffsets()
 {
     return(new Point(StepperX.CurrentPosition(), StepperY.CurrentPosition()));
 }