예제 #1
0
        /**
         * Method that handles when the GUI buttons are held down (Vehicle is moving a single direction)
         */
        private void ButtonPress_Event(object sender, RoutedEventArgs e)
        {
            //TODO add button up event for stop command
            //var picar = (PiCarConnection)DeviceListMn.SelectedItem;
            //if (picar == null || picar.Mode != ModeRequest.Types.Mode.Lead) return;
            var button = (RepeatButton)sender;

            switch (button.Name)
            {
            case "Forward":
                LogField.AppendText(DateTime.Now + ":\tMoving forward\n");
                MoveVehicle(1.0, 0.0);
                break;

            case "Backwards":
                LogField.AppendText(DateTime.Now + ":\tMoving backwards\n");
                MoveVehicle(-1.0, 0.0);
                break;

            case "Left":
                LogField.AppendText(DateTime.Now + ":\tMoving left\n");
                MoveVehicle(0.0, -1.0);
                break;

            case "Right":
                LogField.AppendText(DateTime.Now + ":\tMoving right\n");
                MoveVehicle(0.0, 1.0);
                break;

            default:
                Console.WriteLine("Mistakes were made");
                break;
            }
            LogField.ScrollToEnd();
        }
예제 #2
0
        /**
         * Method that handles when one or more key is released (Vehicle is stopping in one or more directions)
         */
        private void Key_up(object sender, KeyEventArgs e)
        {
            //var picar = (PiCarConnection)DeviceListMn.SelectedItem;
            //if (picar == null || picar.Mode != ModeRequest.Types.Mode.Lead) return;

            var directionMotor = 0.0;
            var throttleMotor  = 0.0;

            if (Keyboard.IsKeyUp(Key.W) && Keyboard.IsKeyUp(Key.Up))
            {
                throttleMotor--;
            }

            if (Keyboard.IsKeyUp(Key.S) && Keyboard.IsKeyUp(Key.Down))
            {
                throttleMotor++;
            }

            if (Keyboard.IsKeyUp(Key.A) && Keyboard.IsKeyUp(Key.Left))
            {
                directionMotor++;
            }

            if (Keyboard.IsKeyUp(Key.D) && Keyboard.IsKeyUp(Key.Right))
            {
                directionMotor--;
            }

            string output = Direction.EncodeDirection(DateTime.Now, throttleMotor, directionMotor);

            LogField.AppendText(output);
            MoveVehicle(throttleMotor, directionMotor);
            LogField.ScrollToEnd();
        }
예제 #3
0
 /**
  *  Method that handles when the GUI button is released (Vehicle is stopped)
  */
 private void ButtonPress_Released(object sender, RoutedEventArgs e)
 {
     //var picar = (PiCarConnection)DeviceListMn.SelectedItem;
     //if (picar == null || picar.Mode != ModeRequest.Types.Mode.Lead) return;
     LogField.AppendText(DateTime.Now + ":\tNow In Neutral\n");
     MoveVehicle(0.0, 0.0);
     LogField.ScrollToEnd();
 }
예제 #4
0
 //stops the stream from being saved
 private void StopSaving_Click(object sender, RoutedEventArgs e)
 {
     StreamSavingHeader.IsEnabled     = true;
     StopStreamSavingHeader.IsEnabled = false;
     if (_saveStreamEnabled == true)
     {
         LogField.AppendText(DateTime.Now + ":\tStream will no longer be saved to a file\n");
         LogField.ScrollToEnd();
     }
     _saveStreamEnabled = false;
 }
예제 #5
0
        private void SetFollowerModelPID_Click(object sender, RoutedEventArgs e)
        {
            var picar = SelectedPiCar();

            if (picar is null)
            {
                return;
            }
            LogField.AppendText(DateTime.Now + ":\tSetting " + picar + "to legacy PID follower model\n");
            LogField.ScrollToEnd();
            picar.SetFollowerModel(1);
        }
예제 #6
0
        private void DisconnectCar(PiCarConnection picar)
        {
            if (picar.GetType() == typeof(DummyConnection))
            {
                return;
            }

            LogField.AppendText(DateTime.Now + ":\t" + picar + " stopped responding, disconnecting.\n");
            LogField.ScrollToEnd();
            deviceListMain.Remove(picar);
            DeviceListMn.ItemsSource = null;
            DeviceListMn.ItemsSource = deviceListMain;
        }
예제 #7
0
        //opens up window for user to specify directory they want to save file to
        //and allows them to specify the session prefix name
        private void ImageSaving_Click(object sender, RoutedEventArgs e)
        {
            if (SaveStreamSetup == null)
            {
                SaveStreamSetup = new SaveStreamSetup();
                SaveStreamSetup.Show();
            }
            else if (SaveStreamSetup != null)
            {
                SaveStreamSetup.Focus();
            }

            LogField.ScrollToEnd();
        }
예제 #8
0
 private void SetVehicleMode(PiCarConnection picar, ModeRequest.Types.Mode mode)
 {
     try
     {
         picar.SetMode(mode);
         DeviceStatus.Text = picar.Mode.ToString();
         LogField.AppendText(DateTime.Now + ":\tSetting " + picar + "to " + picar.Mode.ToString() + "\n");
         LogField.ScrollToEnd();
     }
     catch (Exception e)
     {
         DisconnectCar(picar);
         Console.WriteLine(e);
     }
 }
예제 #9
0
 private void ModeChanger_Click(object sender, RoutedEventArgs e)
 {
     if (_controlMode)
     {
         _controlMode                = false;
         DefaultHeader.IsEnabled     = true;
         AlternativeHeader.IsEnabled = false;
         LogField.AppendText(DateTime.Now + ":\tUsing RC control mode\n");
     }
     else
     {
         _controlMode                = true;
         DefaultHeader.IsEnabled     = false;
         AlternativeHeader.IsEnabled = true;
         LogField.AppendText(DateTime.Now + ":\tUsing simulator control mode\n");
     }
     LogField.ScrollToEnd();
 }
예제 #10
0
        /**
         * Method that handles when one or more key is pressed down (Vehicle is moving in one or more directions)
         */
        private void Key_down(object sender, KeyEventArgs e)
        {
            //var picar = (PiCarConnection)DeviceListMn.SelectedItem;
            //if (picar == null || picar.Mode != ModeRequest.Types.Mode.Lead) return;
            if (e.IsRepeat)
            {
                return;
            }

            var directionMotor = 0.0;
            var throttleMotor  = 0.0;

            string[] throttleStrings  = { "Moving backwards", "In Neutral", "Moving forwards" };
            string[] directionStrings = { "and left", "", "and right" };


            if (Keyboard.IsKeyDown(Key.W) || Keyboard.IsKeyDown(Key.Up))
            {
                throttleMotor++;
            }

            if (Keyboard.IsKeyDown(Key.S) || Keyboard.IsKeyDown(Key.Down))
            {
                throttleMotor--;
            }

            if (Keyboard.IsKeyDown(Key.A) || Keyboard.IsKeyDown(Key.Left))
            {
                directionMotor--;
            }

            if (Keyboard.IsKeyDown(Key.D) || Keyboard.IsKeyDown(Key.Right))
            {
                directionMotor++;
            }

            string output = Direction.EncodeDirection(DateTime.Now, throttleMotor, directionMotor);

            LogField.AppendText(output);
            MoveVehicle(throttleMotor, directionMotor);
            LogField.ScrollToEnd();
        }
예제 #11
0
        /**
         * Method that handles the simulator style input for variable speed and direction
         */
        private void ControllerMovement()
        {
            //var picar = (PiCarConnection)DeviceListMn.SelectedItem;
            //if (picar == null || picar.Mode != ModeRequest.Types.Mode.Lead) return;
            var state = _controller.GetState().Gamepad;

            //Default control settings (Simulator Mode)
            if (_controlMode)
            {
                if (state.LeftThumbX.Equals(_previousState.LeftThumbX) &&
                    state.LeftTrigger.Equals(_previousState.LeftTrigger) &&
                    state.RightTrigger.Equals(_previousState.RightTrigger))
                {
                    return;
                }


                //_Motor1 produces either -1.0 for left or 1.0 for right motion
                _directionController = Math.Abs((double)state.LeftThumbX) < DeadzoneValue
                    ? 0 :
                                       (double)state.LeftThumbX / short.MinValue * -1;
                _directionController = Math.Round(_directionController, 3);

                /**
                 * These variables produce either 1.0 for forward motion, or -1 for backwards.
                 * If the values are both non-zero, then there will be no motion in either direction
                 */
                var forwardSpeed  = Math.Round(state.RightTrigger / 255.0, 3);
                var backwardSpeed = Math.Round(state.LeftTrigger / 255.0 * -1.0, 3);

                if (forwardSpeed > 0 && backwardSpeed == 0)
                {
                    _throttleController = forwardSpeed;
                }
                else if (backwardSpeed < 0 && forwardSpeed == 0)
                {
                    _throttleController = backwardSpeed;
                }
                else
                {
                    _throttleController = 0.0;
                }
            }

            //Alternative control settings (RC Mode)
            else
            {
                if (state.LeftThumbY.Equals(_previousState.LeftThumbY) &&
                    state.RightThumbX.Equals(_previousState.RightThumbX))
                {
                    return;
                }

                _directionController = Math.Abs((double)state.RightThumbX) < DeadzoneValue
                    ? 0
                    : (double)state.RightThumbX / short.MinValue * -1;
                _directionController = Math.Round(_directionController, 3);

                _throttleController = Math.Abs((double)state.LeftThumbY) < DeadzoneValue
                    ? 0
                    : (double)state.LeftThumbY / short.MinValue * -1;
            }

            string output = Direction.EncodeDirection(DateTime.Now, _throttleController, _directionController);

            LogField.AppendText(output);
            LogField.ScrollToEnd();
            MoveVehicle(_throttleController, _directionController);
            _previousState = state;
        }