static async Task Connect() { mcu = new Microcontroller(new SerialTransport(PORT)); mcu.Data += Data; mcu.Protocol += Protocol; await mcu.Connect(); }
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); }
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; }
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); }
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))); }
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(); }
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))); }
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); }
internal void SetControllerProperties(CanTransceiver transceiver, IMicrocontroller owningMicrocontroller, FrameBuilder frameBuilder) { _transceiver = transceiver; _owningMicrocontroller = owningMicrocontroller; _frameBuilder = frameBuilder; }
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(); }
internal CanNode(IMicrocontroller microController, CanTransceiver transceiver) { MicroController = microController; Transceiver = transceiver; }
public OmniDrive(IMicrocontroller mcu) { this.mcu = mcu; }
public Gyro(IMicrocontroller mcu) { this.mcu = mcu; }
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(); }
public Accelerometer(IMicrocontroller mcu) { this.mcu = mcu; }