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"); } }
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"); } }
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); } } }