Exemple #1
0
 static async Task Connect()
 {
     mcu           = new Microcontroller(new SerialTransport(PORT));
     mcu.Data     += Data;
     mcu.Protocol += Protocol;
     await mcu.Connect();
 }
Exemple #2
0
 public Servo(IMicrocontroller mcu, int pin, int minMilliseconds, int maxMilliseconds)
 {
     this.mcu             = mcu;
     this.pin             = pin;
     this.minMilliseconds = minMilliseconds;
     this.maxMilliseconds = maxMilliseconds;
     MCU.Initialize(mcu);
 }
Exemple #3
0
 public Motor(IMicrocontroller mcu, int pinA, int pinB, int pwmPin, string name, double smoothing = double.MaxValue)
 {
     this.mcu       = mcu;
     this.pinA      = pinA;
     this.pinB      = pinB;
     this.pwmPin    = pwmPin;
     this.name      = name;
     this.smoothing = smoothing;
 }
Exemple #4
0
 public Arm(IMicrocontroller mcu)
 {
     grip     = new Servo(mcu, 7, 700, 2000);
     hand     = new Servo(mcu, 6, 500, 2500);
     wrist    = new Servo(mcu, 8, 500, 2400);
     elbow    = new Servo(mcu, 5, 700, 2100);
     shoulder = new Servo(mcu, 9, 800, 2300);
     mount    = new Servo(mcu, 10, 1000, 2000);
 }
Exemple #5
0
 public Blinker(int pin, IMicrocontroller mcu)
 {
     this.pin = pin;
     this.mcu = mcu;
     mcu.Instruction("delay", 100);
     mcu.BindAction("delay", Delay);
     mcu.DefineAction(Blink);
     mcu.DefineAction(S);
     mcu.DefineAction(O);
 }
        public CanNodeSession CreateCanNodeSession(Type microcontrollerType)
        {
            var canController = new CanController();
            IMicrocontroller microController = (IMicrocontroller)Activator.CreateInstance(microcontrollerType);

            microController.CanController = canController;
            var transceiver = new CanTransceiver(canController);

            canController.SetControllerProperties(transceiver, microController, new FrameBuilder());

            return(new CanNodeSession(new CanNode(microController, transceiver)));
        }
Exemple #7
0
        static async Task Demo()
        {
            Console.WriteLine("Connecting to MCU ({0})...", PORT);
            mcu = new Microcontroller(new SerialTransport(PORT));
            await mcu.Connect();

            Console.WriteLine("Blinking SOS...");
            const int LED_PIN = 9;
            var       blinker = new Blinker(LED_PIN, mcu);
            await blinker.InitAsync();

            await blinker.Message();

            Console.WriteLine("Disconnecting from MCU...");
            await mcu.Disconnect();
        }
Exemple #8
0
        static async Task ControlServos()
        {
            Console.WriteLine("Connecting to MCU ({0})...", PORT);
            mcu = new Microcontroller(new SerialTransport(PORT));
            await mcu.Connect();

            Console.WriteLine("Attaching servos...");
            var pan = new Servo(mcu, 1, 1000, 2000);
            await pan.Initialize();

            var tilt = new Servo(mcu, 0, 1000, 2000);
            await tilt.Initialize();

            Console.WriteLine("Control servos with left thumbstick. Press 'Back' to disconnect.");

            var lastY = float.NaN;
            var lastX = float.NaN;

            GamePadState pad;

            do
            {
                pad = GamePad.GetState(PlayerIndex.One);

                var y = pad.ThumbSticks.Left.Y;
                var x = pad.ThumbSticks.Left.X;

                if (x.CompareTo(lastX) != 0)
                {
                    lastX = x;
                    Console.WriteLine("X: {0}", x);
                    await pan.Write(x);
                }
                if (y.CompareTo(lastY) != 0)
                {
                    lastY = y;
                    Console.WriteLine("Y: {0}", y);
                    await tilt.Write(y);
                }
            } while (pad.Buttons.Back != ButtonState.Pressed);

            Console.WriteLine("Disconnecting from MCU...");
            await mcu.Disconnect();
        }
        public IActionResult TryHandle(IRequestHandler requestHandler, string url)
        {
            IMicrocontrollerResolver microcontrollerResolver = requestHandler.HttpContext.RequestServices.GetService <IMicrocontrollerResolver>();
            Microcontroller          microcontroller         = microcontrollerResolver.GetMicrocontroller(requestHandler, url);

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

            IMicrocontroller microcontrollerInstance = this.GetMicrocontrollerInstance(microcontroller);

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

            return(microcontrollerInstance.Invoke(requestHandler, microcontroller, microcontrollerResolver.GetParameters(microcontroller.UrlTemplate, url)));
        }
Exemple #10
0
 public static void Initialize(IMicrocontroller mcu)
 {
     mcu.BindAction("pinMode", PinMode);
     mcu.BindFunc("digitalRead", DigitalRead);
     mcu.BindAction("digitalWrite", DigitalWrite);
     mcu.BindFunc("analogRead", AnalogRead);
     mcu.BindAction("analogWrite", AnalogWrite);
     mcu.BindFunc("loopTicks", LoopTicks);
     mcu.BindAction("wireBegin", WireBegin);
     mcu.BindAction("wireRequestFrom", WireRequestFrom);
     mcu.BindFunc("wireAvailable", WireAvailable);
     mcu.BindFunc("WireRead", WireRead);
     mcu.BindAction("WireBeginTransmission", WireBeginTransmission);
     mcu.BindAction("WireWrite", WireWrite);
     mcu.BindAction("WireEndTransmission", WireEndTransmission);
     mcu.BindAction("ServoAttach", ServoAttach);
     mcu.BindAction("ServoDetach", ServoDetach);
     mcu.BindAction("ServoWriteMicros", ServoWriteMicros);
     mcu.BindFunc("Milliseconds", Milliseconds);
     mcu.BindFunc("PulseIn", PulseIn);
 }
Exemple #11
0
 internal void SetControllerProperties(CanTransceiver transceiver, IMicrocontroller owningMicrocontroller, FrameBuilder frameBuilder)
 {
     _transceiver           = transceiver;
     _owningMicrocontroller = owningMicrocontroller;
     _frameBuilder          = frameBuilder;
 }
Exemple #12
0
        static async Task ControlServos()
        {
            Console.WriteLine("Connecting to MCU ({0})...", PORT);
            mcu = new Microcontroller(new SerialTransport(PORT));
            await mcu.Connect();

            Console.WriteLine("Attaching arm...");
            var arm = new Arm(mcu);
            await arm.Initialize();

            Console.WriteLine("Press 'Back' to disconnect.");

            var lastLeftTrigger  = float.NaN;
            var lastRightTrigger = float.NaN;
            var lastLeftX        = float.NaN;
            var lastLeftY        = float.NaN;
            var lastRightX       = float.NaN;
            var lastRightY       = float.NaN;

            GamePadState pad;

            do
            {
                pad = GamePad.GetState(PlayerIndex.One);

                var leftTrigger  = pad.Triggers.Left;
                var rightTrigger = pad.Triggers.Right;
                var leftX        = pad.ThumbSticks.Left.X;
                var leftY        = pad.ThumbSticks.Left.Y;
                var rightX       = pad.ThumbSticks.Right.X;
                var rightY       = pad.ThumbSticks.Right.Y;

                // grip
                if (rightTrigger.CompareTo(lastRightTrigger) != 0)
                {
                    lastRightTrigger = rightTrigger;
                    Console.WriteLine("Grip: {0}", rightTrigger);
                    await arm.Grip(rightTrigger * 2 - 1);
                }

                // hand
                if (leftX.CompareTo(lastLeftX) != 0)
                {
                    lastLeftX = leftX;
                    Console.WriteLine("Hand: {0}", leftX);
                    await arm.Hand(-leftX);
                }

                // wrist
                if (leftY.CompareTo(lastLeftY) != 0)
                {
                    lastLeftY = leftY;
                    Console.WriteLine("Wrist: {0}", leftY);
                    await arm.Wrist(-leftY);
                }

                // elbow
                if (rightY.CompareTo(lastRightY) != 0)
                {
                    lastRightY = rightY;
                    Console.WriteLine("Elbow: {0}", rightY);
                    await arm.Elbow(rightY);
                }

                // shoulder
                if (rightX.CompareTo(lastRightX) != 0)
                {
                    lastRightX = rightX;
                    Console.WriteLine("Shoulder: {0}", rightX);
                    await arm.Shoulder(rightX);
                }

                // mount
                if (leftTrigger.CompareTo(lastLeftTrigger) != 0)
                {
                    lastLeftTrigger = leftTrigger;
                    Console.WriteLine("Mount: {0}", leftTrigger);
                    await arm.Mount(leftTrigger * 2 - 1);
                }
            } while (pad.Buttons.Back != ButtonState.Pressed);

            Console.WriteLine("Disconnecting from MCU...");
            await mcu.Disconnect();
        }
Exemple #13
0
 internal CanNode(IMicrocontroller microController, CanTransceiver transceiver)
 {
     MicroController = microController;
     Transceiver     = transceiver;
 }
Exemple #14
0
 public OmniDrive(IMicrocontroller mcu)
 {
     this.mcu = mcu;
 }
Exemple #15
0
 public Gyro(IMicrocontroller mcu)
 {
     this.mcu = mcu;
 }
Exemple #16
0
        static async Task ControlOmni()
        {
            Console.WriteLine("Connecting to MCU ({0})...", PORT);
            mcu = new Microcontroller(new SerialTransport(PORT));
            await mcu.Connect();

            Console.WriteLine("Attaching omni drive...");
            var omni = new OmniDrive(mcu);
            await omni.Initialize();


            Console.WriteLine("Control with left thumbstick. Press 'Back' to disconnect.");

            var lastY             = float.NaN;
            var lastX             = float.NaN;
            var lastShoulderLeft  = ButtonState.Released;
            var lastShoulderRight = ButtonState.Released;

            GamePadState pad;

            do
            {
                pad = GamePad.GetState(PlayerIndex.One);

                var y             = pad.ThumbSticks.Left.Y;
                var x             = pad.ThumbSticks.Left.X;
                var shoulderLeft  = pad.Buttons.LeftShoulder;
                var shoulderRight = pad.Buttons.RightShoulder;

                if (x.CompareTo(lastX) != 0)
                {
                    lastX = x;
                    Console.WriteLine("X: {0}", x);
                    if (x < 0)
                    {
                        await omni.DriveLeft((int)Math.Abs(x * 100));
                    }
                    else if (x > 0)
                    {
                        await omni.DriveRight((int)(Math.Abs(x * 100)));
                    }
                    else
                    {
                        await omni.AllStop();
                    }
                }
                if (y.CompareTo(lastY) != 0)
                {
                    lastY = y;
                    Console.WriteLine("Y: {0}", y);
                    if (y < 0)
                    {
                        await omni.DriveForward((int)Math.Abs(y * 100));
                    }
                    else if (y > 0)
                    {
                        await omni.DriveBackward((int)(Math.Abs(y * 100)));
                    }
                    else
                    {
                        await omni.AllStop();
                    }
                }

                if (shoulderLeft.CompareTo(lastShoulderLeft) != 0)
                {
                    lastShoulderLeft = shoulderLeft;
                    Console.WriteLine("ShoulderLeft : {0}", shoulderLeft);
                    if (shoulderLeft == ButtonState.Pressed)
                    {
                        await omni.RotateLeft(100);
                    }
                    else
                    {
                        await omni.AllStop();
                    }
                }
                if (shoulderRight.CompareTo(lastShoulderRight) != 0)
                {
                    lastShoulderRight = shoulderRight;
                    Console.WriteLine("ShoulderRight : {0}", shoulderRight);
                    if (shoulderRight == ButtonState.Pressed)
                    {
                        await omni.RotateRight(100);
                    }
                    else
                    {
                        await omni.AllStop();
                    }
                }
            } while (pad.Buttons.Back != ButtonState.Pressed);

            Console.WriteLine("Disconnecting from MCU...");
            await mcu.Disconnect();
        }
Exemple #17
0
 public Accelerometer(IMicrocontroller mcu)
 {
     this.mcu = mcu;
 }