/// <summary>
        /// Copy generic state to this state, transforming data members.
        /// </summary>
        /// <param name="genericState"></param>
        public void CopyFromGenericState(pxmotor.MotorState genericState)
        {
            if (!string.IsNullOrEmpty(genericState.Name))
            {
                this.Name = genericState.Name;
            }

            switch (genericState.HardwareIdentifier)
            {
            case 1:
                this.MotorPort = NxtMotorPort.MotorA;
                break;

            case 2:
                this.MotorPort = NxtMotorPort.MotorB;
                break;

            case 3:
                this.MotorPort = NxtMotorPort.MotorC;
                break;
            }

            this.TargetPower     = genericState.CurrentPower;
            this.ReversePolarity = genericState.ReversePolarity;
        }
        /// <summary>
        /// Post Configure Sensor Connection with body and return the response port.
        /// </summary>
        /// <param name="motorPort"></param>
        /// <returns></returns>
        public virtual PortSet <DefaultUpdateResponseType, Fault> ConnectToBrick(NxtMotorPort motorPort)
        {
            ConnectToBrick op = new ConnectToBrick(motorPort);

            this.PostUnknownType(op);
            return(op.ResponsePort);
        }
Esempio n. 3
0
        /// <summary>
        /// <para>SETOUTPUTSTATE</para>
        /// </summary>
        /// <remarks>
        /// <para>Reference: BDK, Appendix 2, p. 6.</para>
        /// </remarks>
        /// <param name="motorPort">Motor port</param>
        /// <param name="power">Power set point</param>
        /// <param name="mode">Mode</param>
        /// <param name="regulationMode">Regulation mode</param>
        /// <param name="turnRatio">Turn ratio</param>
        /// <param name="runState">Run state</param>
        /// <param name="tachoLimit">Tacho limit, 0: run forever</param>
        public void SetOutputState(NxtMotorPort motorPort, sbyte power, NxtMotorMode mode, NxtMotorRegulationMode regulationMode, sbyte turnRatio, NxtMotorRunState runState, UInt32 tachoLimit)
        {
            if (power < -100)
            {
                power = -100;
            }
            if (power > 100)
            {
                power = 100;
            }

            if (turnRatio < -100)
            {
                turnRatio = -100;
            }
            if (turnRatio > 100)
            {
                turnRatio = 100;
            }

            byte[] request = new byte[12];
            request[0] = (byte)(ReplyRequired ? 0x00 : 0x80);
            request[1] = (byte)NxtCommand.SetOutputState;
            request[2] = (byte)motorPort;
            request[3] = (byte)power;
            request[4] = (byte)mode;
            request[5] = (byte)regulationMode;
            request[6] = (byte)turnRatio;
            request[7] = (byte)runState;
            Util.SetUInt32(tachoLimit, request, 8);

            Send(request);
        }
Esempio n. 4
0
 /// <summary>
 /// <para>Attaches a motor to the NXT brick.</para>
 /// </summary>
 /// <param name="motor">The motor</param>
 /// <param name="port">The port to attach the motor to</param>
 private void AttachMotor(NxtMotor motor, NxtMotorPort port)
 {
     if (motor != null)
     {
         motorArr[port] = motor;
         motor.Brick    = this;
         motor.Port     = port;
     }
 }
Esempio n. 5
0
        /// <summary>
        /// <para>RESETMOTORPOSITION</para>
        /// </summary>
        /// <remarks>
        /// <para>Reference: BDK, Appendix 2, p. 9.</para>
        /// </remarks>
        /// <param name="motorPort">Output port</param>
        /// <param name="relative">Relative? True: position relative to last movement, False: absolute position</param>
        public void ResetMotorPosition(NxtMotorPort motorPort, bool relative)
        {
            byte[] request = new byte[] {
                (byte)(ReplyRequired ? 0x00 : 0x80),
                (byte)NxtCommand.ResetMotorPosition,
                (byte)motorPort,
                (byte)(relative ? 0xFF : 0x00)
            };

            Send(request);
        }
Esempio n. 6
0
        /// <summary>
        /// <para>GETOUTPUTSTATE</para>
        /// </summary>
        /// <remarks>
        /// <para>Reference: BDK, Appendix 2, p. 8.</para>
        /// </remarks>
        /// <param name="motorPort">Ourput Port</param>
        /// <returns>Returns a parsed NxtGetOutputStateReply with the reply</returns>
        public NxtGetOutputStateReply?GetOutputState(NxtMotorPort motorPort)
        {
            byte[] request = new byte[] {
                0x00,
                (byte)NxtCommand.GetOutputState,
                (byte)motorPort
            };

            byte[] reply = Send(request);

            if (reply == null)
            {
                return(null);
            }

            byte motorPortOut = reply[3];

            if (motorPortOut != (byte)motorPort)
            {
                throw new NxtException(string.Format("Output motor port, {0}, was different from input motor port, {1}.", motorPortOut, motorPort));
            }

            NxtGetOutputStateReply result;

            result.power           = (sbyte)reply[4];
            result.mode            = (NxtMotorMode)reply[5];
            result.regulationMode  = (NxtMotorRegulationMode)reply[6];
            result.turnRatio       = (sbyte)reply[7];
            result.runState        = (NxtMotorRunState)reply[8];
            result.tachoLimit      = Util.GetUInt32(reply, 9);
            result.tachoCount      = Util.GetInt32(reply, 13);
            result.blockTachoCount = Util.GetInt32(reply, 17);
            result.rotationCount   = Util.GetInt32(reply, 21);

            return(result);
        }
 /// <summary>
 /// Get the HardwareIdentifier representation of a NxtMotorPort (1-3).
 /// </summary>
 /// <param name="port"></param>
 /// <returns></returns>
 public static int HardwareIdentifier(NxtMotorPort port)
 {
     return ((int)(PortNumber(port) + 1));
 }
Esempio n. 8
0
 /// <summary>
 /// LEGO NXT Wheel Configuration
 /// </summary>
 /// <param name="motorPort"></param>
 /// <param name="reversePolarity"></param>
 /// <param name="wheelDiameter"></param>
 public WheelConfiguration(NxtMotorPort motorPort, bool reversePolarity, double wheelDiameter)
 {
     this.MotorPort       = motorPort;
     this.ReversePolarity = reversePolarity;
     this.WheelDiameter   = wheelDiameter;
 }
        /// <summary>
        /// <para>GETOUTPUTSTATE</para>
        /// </summary>
        /// <remarks>
        /// <para>Reference: BDK, Appendix 2, p. 8.</para>
        /// </remarks>
        /// <param name="motorPort">Ourput Port</param>
        /// <returns>Returns a parsed NxtGetOutputStateReply with the reply</returns>
        public NxtGetOutputStateReply? GetOutputState(NxtMotorPort motorPort)
        {
            byte[] request = new byte[] {
                0x00,
                (byte) NxtCommand.GetOutputState,
                (byte) motorPort
            };

            byte[] reply = Send(request);

            if (reply == null) return null;

            byte motorPortOut = reply[3];
            if (motorPortOut != (byte)motorPort)
                throw new NxtException(string.Format("Output motor port, {0}, was different from input motor port, {1}.", motorPortOut, motorPort));

            NxtGetOutputStateReply result;
            result.power = (sbyte)reply[4];
            result.mode = (NxtMotorMode)reply[5];
            result.regulationMode = (NxtMotorRegulationMode)reply[6];
            result.turnRatio = (sbyte)reply[7];
            result.runState = (NxtMotorRunState)reply[8];
            result.tachoLimit = Util.GetUInt32(reply, 9);
            result.tachoCount = Util.GetInt32(reply, 13);
            result.blockTachoCount = Util.GetInt32(reply, 17);
            result.rotationCount = Util.GetInt32(reply, 21);

            return result;
        }
        /// <summary>
        /// <para>SETOUTPUTSTATE</para>
        /// </summary>
        /// <remarks>
        /// <para>Reference: BDK, Appendix 2, p. 6.</para>
        /// </remarks>
        /// <param name="motorPort">Motor port</param>
        /// <param name="power">Power set point</param>
        /// <param name="mode">Mode</param>
        /// <param name="regulationMode">Regulation mode</param>
        /// <param name="turnRatio">Turn ratio</param>
        /// <param name="runState">Run state</param>
        /// <param name="tachoLimit">Tacho limit, 0: run forever</param>
        public void SetOutputState(NxtMotorPort motorPort, sbyte power, NxtMotorMode mode, NxtMotorRegulationMode regulationMode, sbyte turnRatio, NxtMotorRunState runState, UInt32 tachoLimit)
        {
            if (power < -100) power = -100;
            if (power > 100) power = 100;

            if (turnRatio < -100) turnRatio = -100;
            if (turnRatio > 100) turnRatio = 100;

            byte[] request = new byte[12];
            request[0] = (byte)(ReplyRequired ? 0x00 : 0x80);
            request[1] = (byte)NxtCommand.SetOutputState;
            request[2] = (byte)motorPort;
            request[3] = (byte)power;
            request[4] = (byte)mode;
            request[5] = (byte)regulationMode;
            request[6] = (byte)turnRatio;
            request[7] = (byte)runState;
            Util.SetUInt32(tachoLimit, request, 8);

            Send(request);
        }
        /// <summary>
        /// <para>RESETMOTORPOSITION</para>
        /// </summary>
        /// <remarks>
        /// <para>Reference: BDK, Appendix 2, p. 9.</para>
        /// </remarks>
        /// <param name="motorPort">Output port</param>
        /// <param name="relative">Relative? True: position relative to last movement, False: absolute position</param>
        public void ResetMotorPosition(NxtMotorPort motorPort, bool relative)
        {
            byte[] request = new byte[] {
                (byte) (ReplyRequired ? 0x00 : 0x80),
                (byte) NxtCommand.ResetMotorPosition,
                (byte) motorPort,
                (byte) (relative ? 0xFF : 0x00)
            };

            Send(request);
        }
Esempio n. 12
0
 /// <summary>
 /// LEGO NXT Command: GetOutputState
 /// </summary>
 /// <param name="outputPort"></param>
 public LegoGetOutputState(NxtMotorPort outputPort)
     : base(25, LegoCommand.NxtDirectCommand, (byte)LegoCommandCode.GetOutputState, 0x00)
 {
     base.RequireResponse = true;
     OutputPort = outputPort;
 }
 /// <summary>
 /// Configure Device Connection
 /// </summary>
 /// <param name="motorPort"></param>
 public ConnectToBrick(NxtMotorPort motorPort)
     : base(new MotorConfig(motorPort))
 {
 }
Esempio n. 14
0
 /// <summary>
 /// <para>Attaches a motor to the NXT brick.</para>
 /// </summary>
 /// <param name="motor">The motor</param>
 /// <param name="port">The port to attach the motor to</param>
 private void AttachMotor(NxtMotor motor, NxtMotorPort port)
 {
     if (motor != null)
     {
         motorArr[port] = motor;
         motor.Brick = this;
         motor.Port = port;
     }
 }
Esempio n. 15
0
 public MotorPort(NxtMotorPort motor, int brick)
     : this()
 {
     Motor = motor;
     Brick = brick;
 }
Esempio n. 16
0
        static void LinkMotorAxis()
        {
            Console.WriteLine("\nYou now have to specify which Motor represents which 3-dimensional Axis.");
            Console.WriteLine("Enter ('A'/'B'/'C') the Motor controlling X-Axis (left-right) movement:");
            MotorXaxis = Console.ReadKey().KeyChar;

            Console.WriteLine("\nEnter ('A'/'B'/'C') the Motor controlling Y-Axis (foward-backward) movement: (This should be the axis that pushes the drill foward)");
            MotorYaxis = Console.ReadKey().KeyChar;

            Console.WriteLine("\nEnter ('A'/'B'/'C') the Motor controlling Z-Axis (up-down) movement:");
            MotorZaxis = Console.ReadKey().KeyChar;

            Xmotor = new McNxtMotor();
            Ymotor = new McNxtMotor();
            Zmotor = new McNxtMotor();

            switch (MotorXaxis)
            {
                case 'a':
                    brick.MotorA = Xmotor;
                    XmotorPort = NxtMotorPort.PortA;
                    break;
                case 'b':
                    brick.MotorB = Xmotor;
                    XmotorPort = NxtMotorPort.PortB;
                    break;
                case 'c':
                    brick.MotorC = Xmotor;
                    XmotorPort = NxtMotorPort.PortC;
                    break;
            }

            switch (MotorYaxis)
            {
                case 'a':
                    brick.MotorA = Ymotor;
                    YmotorPort = NxtMotorPort.PortA;
                    break;
                case 'b':
                    brick.MotorB = Ymotor;
                    YmotorPort = NxtMotorPort.PortB;
                    break;
                case 'c':
                    brick.MotorC = Ymotor;
                    YmotorPort = NxtMotorPort.PortC;
                    break;
            }

            switch (MotorZaxis)
            {
                case 'a':
                    brick.MotorA = Zmotor;
                    ZmotorPort = NxtMotorPort.PortA;
                    break;
                case 'b':
                    brick.MotorB = Zmotor;
                    ZmotorPort = NxtMotorPort.PortB;
                    break;
                case 'c':
                    brick.MotorC = Zmotor;
                   ZmotorPort = NxtMotorPort.PortC;
                    break;
            }
        }
        /// <summary>
        /// Convert Hardware Identifier (1-3) to MotorPort (A-C)
        /// </summary>
        /// <param name="hardwareIdentifier"></param>
        /// <param name="defaultMotorPort"></param>
        /// <returns></returns>
        internal static NxtMotorPort HardwareIdentifierToMotorPort(int hardwareIdentifier, NxtMotorPort defaultMotorPort)
        {
            NxtMotorPort motorPort;
            switch (hardwareIdentifier)
            {
                case 1:
                    motorPort = NxtMotorPort.MotorA;
                    break;
                case 2:
                    motorPort = NxtMotorPort.MotorB;
                    break;
                case 3:
                    motorPort = NxtMotorPort.MotorC;
                    break;
                default:
                    motorPort = defaultMotorPort;
                    break;
            }

            return motorPort;
        }
 /// <summary>
 /// LEGO NXT Motor Configuration.
 /// </summary>
 /// <param name="motorPort"></param>
 public MotorConfig(NxtMotorPort motorPort)
 {
     this.MotorPort = motorPort;
 }
        /// <summary>
        /// Get the integer representation of a NxtMotorPort (0-2).
        /// </summary>
        /// <param name="port"></param>
        /// <returns></returns>
        public static byte PortNumber(NxtMotorPort port)
        {
            switch (port)
            {
                case NxtMotorPort.MotorA:
                    return 0;

                case NxtMotorPort.MotorB:
                    return 1;

                case NxtMotorPort.MotorC:
                    return 2;

                case NxtMotorPort.AnyMotorPort:
                    return 255;

                default:
                    return 0;
            }
        }
Esempio n. 20
0
 /// <summary>
 /// LEGO NXT Command: Set Output State
 /// </summary>
 /// <param name="motorPort"></param>
 /// <param name="powerSetPoint"></param>
 /// <param name="mode"></param>
 /// <param name="regulationMode"></param>
 /// <param name="turnRatio"></param>
 /// <param name="runState"></param>
 /// <param name="rotationLimit"></param>
 public LegoSetOutputState(NxtMotorPort motorPort,
                           int powerSetPoint,
                           LegoOutputMode mode,
                           LegoRegulationMode regulationMode,
                           int turnRatio,
                           RunState runState,
                           long rotationLimit)
     : base(3, LegoCommand.NxtDirectCommand, (byte)LegoCommandCode.SetOutputState, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00)
 {
     this.MotorPort = motorPort;
     this.PowerSetPoint = powerSetPoint;
     this.Mode = mode;
     this.RegulationMode = regulationMode;
     this.TurnRatio = turnRatio;
     this.RunState = runState;
     this.EncoderLimit = rotationLimit;
 }
 /// <summary>
 /// Convert Motor Port (A-C) to HardwareIdentifier (1-3)
 /// </summary>
 /// <param name="motorPort"></param>
 /// <returns></returns>
 internal static int MotorPortToHardwareIdentifier(NxtMotorPort motorPort)
 {
     // Set the hardware identifier from the connected motor port.
     switch (motorPort)
     {
         case NxtMotorPort.MotorA:
             return 1;
         case NxtMotorPort.MotorB:
             return 2;
         case NxtMotorPort.MotorC:
             return 3;
     }
     return 0;
 }
 /// <summary>
 /// Reset Motor Position
 /// </summary>
 /// <param name="outputPort"></param>
 /// <param name="relative"></param>
 public LegoResetMotorPosition(NxtMotorPort outputPort, bool relative)
     : base(3, NxtDirectCommand, (byte)LegoCommandCode.ResetMotorPosition, 0x00, 0x00)
 {
     OutputPort = outputPort;
     Relative = relative;
 }
Esempio n. 23
0
        static void LinkMotorAxis()
        {
            Console.WriteLine("\nYou now have to specify which Motor represents which 3-dimensional Axis.");
            Console.WriteLine("Enter ('A'/'B'/'C') the Motor controlling X-Axis (left-right) movement:");
            MotorXaxis = Console.ReadKey().KeyChar;

            Console.WriteLine("\nEnter ('A'/'B'/'C') the Motor controlling Y-Axis (foward-backward) movement: (This should be the axis that pushes the drill foward)");
            MotorYaxis = Console.ReadKey().KeyChar;

            Console.WriteLine("\nEnter ('A'/'B'/'C') the Motor controlling Z-Axis (up-down) movement:");
            MotorZaxis = Console.ReadKey().KeyChar;

            Xmotor = new McNxtMotor();
            Ymotor = new McNxtMotor();
            Zmotor = new McNxtMotor();

            switch (MotorXaxis)
            {
            case 'a':
                brick.MotorA = Xmotor;
                XmotorPort   = NxtMotorPort.PortA;
                break;

            case 'b':
                brick.MotorB = Xmotor;
                XmotorPort   = NxtMotorPort.PortB;
                break;

            case 'c':
                brick.MotorC = Xmotor;
                XmotorPort   = NxtMotorPort.PortC;
                break;
            }

            switch (MotorYaxis)
            {
            case 'a':
                brick.MotorA = Ymotor;
                YmotorPort   = NxtMotorPort.PortA;
                break;

            case 'b':
                brick.MotorB = Ymotor;
                YmotorPort   = NxtMotorPort.PortB;
                break;

            case 'c':
                brick.MotorC = Ymotor;
                YmotorPort   = NxtMotorPort.PortC;
                break;
            }

            switch (MotorZaxis)
            {
            case 'a':
                brick.MotorA = Zmotor;
                ZmotorPort   = NxtMotorPort.PortA;
                break;

            case 'b':
                brick.MotorB = Zmotor;
                ZmotorPort   = NxtMotorPort.PortB;
                break;

            case 'c':
                brick.MotorC = Zmotor;
                ZmotorPort   = NxtMotorPort.PortC;
                break;
            }
        }