2015-06-15 2 views
-3

Я работаю над программой, которая может передать ваши углы руки роботу Mindstorm на некоторое время. Но моя главная проблема на данный момент заключается в том, что двигатели-роботы не знают ни одной начальной точки, где угол равен 0 градусам. Поэтому у меня возникла идея написать алгоритм, который это сделает. Проблема в том, что я не могу сделать это с помощью цикла, потому что робот пытается самоубийство, когда он получает много команд за один раз. Итак, теперь у меня есть идея сохранить «старый угол i» другому методу. Я не уверен, что это лучший способ сделать это, поэтому мне было интересно, что вы, люди, скажете, что я должен делать. Есть ли способ «сохранить» его в этом методе без использования цикла?C# Сохранение целого числа для другого метода для следующего использования

Вот мой код:

private void RobotMove(int RobotArmR) //RobotArmRight from another method 
    { 

     int i = 0; 
     int k = RobotArmR * 3; // Real time angle *3 for the gear wheel 
     int j = k - i; // Real time angle - old Angle 
     i += j; 
     int sign = Math.Sign(j); 
     // Depends on sign if the motor is moving right or left 
     switch (sign) 
     { 
      case -1://Motor right 

        McNxtBrick brick = new McNxtBrick(NxtCommLinkType.USB, 0); 
        McNxtMotor motor = new McNxtMotor(); 
        brick.MotorA = new McNxtMotor(); 
        brick.Connect(); 
        j *= -1; 
        UInt16 l = Convert.ToUInt16(j); 
        brick.MotorA.Run(20, l); // (Power Right 50, angle to move back or foward to get to the new angle) 
        brick.Disconnect(); 
        break; 

      case 1: //Motor left 

        McNxtBrick brick2 = new McNxtBrick(NxtCommLinkType.USB, 0); 
        McNxtMotor motor2 = new McNxtMotor(); 
        brick2.MotorA = new McNxtMotor(); 
        brick2.Connect(); 
        UInt16 l2 = Convert.ToUInt16(j); 
        brick2.MotorA.Run(-20, l2); // (Power left 50, angle to move back or foward to get to the new angle 
        brick2.Disconnect();   
        break; 


      case 0: 

       break; 

     } 
    } 

Спасибо за Tipps :)

+0

Сохранить другим способом? Как вы могли бы что-то сохранить в методе? Кроме того, вы можете удалить свой коммутатор и использовать math.sign(). –

+0

Это скорее вопрос дизайна, чем конкретная проблема. Переменные используются для хранения вещей. Вы используете переменную, когда хотите что-то хранить: локальная переменная, закрытая переменная, статические и т. Д. Неясно, как именно работает робот, но более вероятно, где несколько команд, и вы хотите, чтобы все они были отправлены один за другим , который звучит как организация * очереди * для меня. Более того, ваш класс связи может иметь что-то поверх него, чтобы держать * состояние устройства *, чтобы вы могли запросить последнюю команду, что такое текущий * угол * и т. Д. – Sinatr

ответ

0

Вы можете создать вспомогательный класс только для сохранения значений глобальных переменных, как публичные статические, как ниже:

public class MyHelper 
{ 
    public static int MyVal {get; set;} 
} 

и где-то в главном методе парафировать значение

MyHelper.MyVal = 0; 

и, конечно, вы можете использовать его в любом месте, например.

MyHelper.MyVal++; 
+0

В качестве быстрого решения - да, как общий обходной путь - нет. – Sinatr

+0

, конечно, есть и другие альтернативы, не могли бы вы назвать еще одну? @Sinatr –

+0

Несомненно, как насчет * статуса устройства * класс поверх * связи устройства * один с ** не статическим ** свойствами. Мой комментарий в основном объясняется выбранным именем - MyHelper, который звучит как общее хранилище для всех видов переменных, чтобы стать полным беспорядком и кошмаром очень скоро. – Sinatr

Смежные вопросы