using LinearAlgebra; namespace RoboidControl { public class Motor : Thing { //public Motor(bool invokeEvent = true) : base(Type.UncontrolledMotor, invokeEvent) { } public Motor(Thing parent) : base(Type.UncontrolledMotor, parent) { } /// @brief Motor turning direction public enum Direction { Clockwise = 1, CounterClockwise = -1 }; /// @brief The forward turning direction of the motor public Direction direction = Direction.Clockwise; protected float currentTargetSpeed = 0; private float _targetSpeed = 0; /// /// The speed between -1 (full reverse), 0 (stop) and 1 (full forward) /// public virtual float targetSpeed { get => _targetSpeed; set { if (value != _targetSpeed) { _targetSpeed = Float.Clamp(value, -1, 1); updateQueue.Enqueue(new CoreEvent(BinaryMsg.Id)); owner.Send(new BinaryMsg(this)); } } } public override byte[] GenerateBinary() { byte[] data = new byte[1]; byte ix = 0; data[ix++] = (byte)(this.targetSpeed * 127); return data; } public override void ProcessBinary(byte[] data) { this.targetSpeed = (float)data[0] / 127; } } }