Example #1
0
        private async void DoWork(object sender, DoWorkEventArgs e)
        {
            var driver = new TwoMotorsDriver(new Motor(27, 22), new Motor(5, 6));
            var ultrasonicDistanceSensor = new UltrasonicDistanceSensor(23, 24);

            await WriteLog("Moving forward");

            while (!_finish)
            {
                driver.MoveForward();

                await Task.Delay(200);

                var distance = await ultrasonicDistanceSensor.GetDistanceInCmAsync(1000);

                if (distance > 35.0)
                {
                    continue;
                }

                await WriteLog($"Obstacle found at {distance} cm or less. Turning right");

                await driver.TurnRightAsync();

                await WriteLog("Moving forward");
            }
        }
Example #2
0
        private async void DoWork(object sender, DoWorkEventArgs e)
        {
            var driver = new TwoMotorsDriver(new Motor(27, 22), new Motor(5, 6));
            var ultrasonicDistanceSensor = new UltrasonicDistanceSensor(23, 24);

            await WriteLog("Moving forward");

            while (!_finish)
            {
                driver.MoveForward();

                await Task.Delay(200);

                var distance = await ultrasonicDistanceSensor.GetDistanceInCmAsync(1000);
                if (distance > 35.0)
                    continue;

                await WriteLog($"Obstacle found at {distance} cm or less. Turning right");

                await driver.TurnRightAsync();

                await WriteLog("Moving forward");
            }
        }
Example #3
0
        private async void DoWork(object sender, DoWorkEventArgs e)
        {
            var driver = new TwoMotorsDriver(new Motor(27, 22), new Motor(5, 6));
            var ultrasonicDistanceSensor = new UltrasonicDistanceSensor(23, 24);
            await ultrasonicDistanceSensor.InitAsync();

            WriteLog("Moving forward");

            while (!_finish)
            {
                try
                {
                    driver.MoveForward();

                    await Task.Delay(200);

                    var distance = await ultrasonicDistanceSensor.GetDistanceInCmAsync(1000);
                    WriteData("Forward", distance);
                    if (distance > 35.0)
                        continue;

                    WriteLog($"Obstacle found at {distance:F2} cm or less. Turning right");
                    WriteData("Turn Right", distance);

                    await driver.TurnRightAsync();

                    WriteLog("Moving forward");
                }
                catch (Exception ex)
                {
                    WriteLog(ex.Message);
                    driver.Stop();
                    WriteData("Stop", -1);
                }
            }
        }
        private async void DoWork(object sender, DoWorkEventArgs e)
        {
            var ultrasonicDistanceSensor = new UltrasonicDistanceSensor(
                ultrasonicTrigPin,
                ultrasonicEchoPin);
            await ultrasonicDistanceSensor.InitAsync();

            var previousState = _roverState.Clone();
            var state         = _roverState.Clone();
            var currentTimer  = _timer;

            while (!_finish)
            {
                try
                {
                    lock (_stateLock)
                    {
                        currentTimer  = _timer;
                        previousState = state;
                        state         = _roverState.Clone();
                    }

                    if (state.TurnState == RoverTurnState.Right)
                    {
                        _roverState.TurnState = RoverTurnState.Straight;
                        await _driver.TurnRightAsync();
                    }
                    else if (state.TurnState == RoverTurnState.Left)
                    {
                        _roverState.TurnState = RoverTurnState.Straight;
                        await _driver.TurnLeftAsync();
                    }
                    else if (state.TurnState == RoverTurnState.TurnAround)
                    {
                        _roverState.TurnState = RoverTurnState.Straight;
                        await _driver.TurnAroundAsync();
                    }
                    else if (state.TurnState == RoverTurnState.Play)
                    {
                        _roverState.TurnState = RoverTurnState.Straight;
                        await _driver.PlayAsync();
                    }
                    else if (state.TurnState == RoverTurnState.Attack)
                    {
                        _roverState.TurnState = RoverTurnState.Straight;
                        await _driver.AttackAsync();
                    }
                    else
                    {
                        if (previousState.MoveState != state.MoveState)
                        {
                            switch (state.MoveState)
                            {
                            case RoverMoveState.Backward:
                                ResetTimer(currentTimer, _roverState.NewTimer(), 2000);
                                _driver.MoveBackward();
                                break;

                            case RoverMoveState.Forward:
                                ResetTimer(currentTimer, _roverState.NewTimer(), 2000);
                                _driver.MoveForward();
                                break;

                            case RoverMoveState.Stopped:
                                ResetTimer(currentTimer);
                                _driver.Stop();
                                break;
                            }
                        }
                    }

                    await Task.Delay(20);

                    /*
                     * var distance = await ultrasonicDistanceSensor.GetDistanceInCmAsync(1000);
                     * WriteData("Forward", distance);
                     *
                     * if (distance <= 35.0)
                     * {
                     *  WriteLog($"Obstacle found at {distance:F2} cm or less. Turning right");
                     *  WriteData("Turn Right", distance);
                     *
                     *  await driver.TurnRightAsync();
                     *
                     *  WriteLog("Moving forward");
                     * }
                     */
                }
                catch (Exception ex)
                {
                    WriteLog(ex.Message);
                    _driver.Stop();
                    WriteData("Stop", -1);
                }
            }
        }