Esempio n. 1
0
        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");
        }
Esempio n. 2
0
    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)} ");
    }
Esempio n. 3
0
        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");
                }
            }
        }
Esempio n. 4
0
        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);
            }
        }