/// <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> /// Sends a command to the motor connected to the specified port. /// </summary> /// <param name="motorPort">The port where the motor is connected to.</param> /// <param name="power"> /// Power (also referred as speed) set point. Range: -100-100. /// The absolute value of <paramref name="power"/> is used as a percentage of the full power capabilities of the motor. /// The sign of <paramref name="power"/> specifies rotation direction. /// Positive values for <paramref name="power"/> instruct the firmware to turn the motor forward, /// while negative values instruct the firmware to turn the motor backward. /// "Forward" and "backward" are relative to a standard orientation for a particular type of motor. /// Note that direction is not a meaningful concept for outputs like lamps. /// Lamps are affected only by the absolute value of <paramref name="power"/>. /// </param> /// <param name="mode">Motor mode (bit-field).</param> /// <param name="regulation">Regulation mode.</param> /// <param name="turnRatio"> /// This property specifies the proportional turning ratio for synchronized turning using two motors. Range: -100-100. /// <remarks> /// Negative <paramref name="turnRatio"/> values shift power towards the left motor, /// whereas positive <paramref name="turnRatio"/> values shift power towards the right motor. /// In both cases, the actual power applied is proportional to the <paramref name="power"/> set-point, /// such that an absolute value of 50% for <paramref name="turnRatio"/> normally results in one motor stopping, /// and an absolute value of 100% for <paramref name="turnRatio"/> normally results in the two motors /// turning in opposite directions at equal power. /// </remarks> /// </param> /// <param name="runState">Motor run state.</param> /// <param name="tachoLimit"> /// Tacho limit. This property specifies the rotational distance in /// degrees that you want to turn the motor. Range: 0-4294967295, O: run forever. /// The sign of the <paramref name="power"/> property specifies the direction of rotation. /// </param> public void SetOutputState(MotorPort motorPort, sbyte power, MotorModes mode, LegoRegulationMode regulation, sbyte turnRatio, RunState runState, UInt32 tachoLimit ) { var data = CommandHelper.InitializeData(LegoCommandCode.SetOutputState, CommandType.DirectCommandWithoutResponse, 13); data[ 2 ] = (byte) motorPort; data[ 3 ] = (byte) power; data[ 4 ] = (byte) mode; data[ 5 ] = (byte) regulation; data[ 6 ] = (byte) turnRatio; data[ 7 ] = (byte) runState; data[ 8 ] = (byte) ( tachoLimit & 0xFF ); // Byte 8-12: tacho limit ULONG data[ 9 ] = (byte) ( tachoLimit >> 8 ); data[ 10 ] = (byte) ( tachoLimit >> 16 ); data[ 11 ] = (byte) ( tachoLimit >> 24 ); Transmit( data ); // Return package: 0:0x02, 1:Command, 2:StatusByte }