public async Task ExecuteAsync(TachoMotor motor) { if (motor is null) { throw new ArgumentNullException(nameof(motor)); } _logger.LogInformation("Start Linear Mid Calibration"); await motor.TryLockDeviceForCombinedModeNotificationSetupAsync(motor.ModeIndexSpeed, motor.ModeIndexPosition); await motor.SetupNotificationAsync(motor.ModeIndexSpeed, true, 1); await motor.SetupNotificationAsync(motor.ModeIndexPosition, true, 1); await motor.UnlockFromCombinedModeNotificationSetupAsync(true); _logger.LogInformation("Start CW"); await motor.StartPowerAsync((sbyte)(CW *MaxPower)); await motor.SpeedObservable.Where(x => x.SI == 0).FirstAsync().GetAwaiter(); _logger.LogInformation("Reached End by detecting no speed movement."); var cwVal = motor.Position; _logger.LogInformation($"CW End at {cwVal}."); _logger.LogInformation("Start CCW"); await motor.StartPowerAsync((sbyte)(CCW *MaxPower)); await motor.SpeedObservable.Where(x => x.SI == 0).FirstAsync().GetAwaiter(); _logger.LogInformation("Reached End by detecting no speed movement."); var ccwVal = motor.Position; _logger.LogInformation($"CW End at {ccwVal}."); await motor.StopByBrakeAsync(); var range = Math.Abs(cwVal - ccwVal); var extend = (uint)(range / 2); _logger.LogInformation($"Total Range: {range} Extend from center: {extend}"); await motor.StartSpeedForDegreesAsync(extend, (sbyte)(CW *Speed), MaxPower, SpecialSpeed.Hold, SpeedProfiles.None); await motor.SpeedObservable.Where(x => x.SI == 0).FirstAsync().GetAwaiter(); await motor.SetZeroAsync(); _logger.LogInformation($"Moved to center. Reset Position."); await motor.UnlockFromCombinedModeNotificationSetupAsync(false); RangeResult = range; ExtendResult = extend; _logger.LogInformation($"End Linear Mid Calibration"); }
public async Task ExecuteAsync(TachoMotor motor, sbyte startSpeed, sbyte endSpeed, int steps, int milliseconds, CancellationTokenSource cts = default) { _logger.LogInformation($"Start execute {nameof(LinearSpeedChange)} ({startSpeed} - {endSpeed} over {steps} steps and {milliseconds}ms)"); _startSpeed = startSpeed; _motor = motor ?? throw new ArgumentNullException(nameof(motor)); IterationStep = (sbyte)((endSpeed - startSpeed) / steps); _logger.LogInformation($"+ IterationStep: {IterationStep}"); await IterativeExecuteAsync(steps, milliseconds / steps, cts); _logger.LogInformation($"Finished {nameof(LinearSpeedChange)} "); }
private void MotorStart(object sender, EventArgs e) { Button btn = (Button)sender; if (HardwareController.State) { TachoMotor motor = HardwareController.MotorList["ev3-ports:" + btn.Name.TrimStart("btn_".ToCharArray())]; if (btn.Text == "Start") { motor.run_forever(((TrackBar)btn.Parent.Controls[btn.Name.Replace("btn", "tkb")]).Value); } else { motor.stop("coast"); } } }
public static void Main(string[] args) { try { // LcdConsole.WriteLine("Hello world"); // LcdConsole.WriteLine("Hello world2"); // return; Led.Left.Red.Brightness = 0; Led.Left.Green.Brightness = 0; // var touchSensor = new TouchSensor(0); // touchSensor.Changed += b => Console.WriteLine($"Changed: {b}"); /* * while (true) * { * var key = Console.Read(); * Console.WriteLine("You typed: " + key); * } */ Button.Back.Pressed += () => { Environment.Exit(0); }; // var gyroSensor = new GyroSensor(1); // gyroSensor.Changed += value => Console.WriteLine(value); // var lightSensor = new NxtLightSensor(1); // lightSensor.Mode = NxtLightSensorMode.Reflect; // lightSensor.Changed += value => Console.WriteLine(value); // var ultrasonicSensor = new NxtUltrasonicSensor(1); // ultrasonicSensor.Mode = NxtUltrasonicSensorMode.CentimetersContinuous; // ultrasonicSensor.Changed += value => Console.WriteLine(value); var ledSensor = new Ev3InfraredSensor(1); ledSensor.Mode = Ev3InfraredSensorMode.Proximity; ledSensor.Value0Changed += value => Console.WriteLine(value); var motor = new TachoMotor(0); motor.Speed = 500; for (var i = 0; i < 5; i++) { motor.RunToAbsolutePosition(180); Thread.Sleep(3000); motor.RunToAbsolutePosition(0); Thread.Sleep(3000); } /* * for (var i = 0; i < 100; i++) * { * Led.Left.Red.Brightness = (byte)(255 - Led.Left.Red.Brightness); * Led.Left.Green.Brightness = (byte)(255 - Led.Left.Green.Brightness); * Thread.Sleep(1); * } * Console.WriteLine("Set led 2"); */ } catch (Exception e) { Console.WriteLine(e); } }