> For the complete documentation index, see [llms.txt](https://yams.yassrobotics.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://yams.yassrobotics.com/documentation/tutorials.md).

# Tutorials

- [Create a project and install YAMS](https://yams.yassrobotics.com/documentation/tutorials/project-setup.md): Make the robot project that every tutorial starts from.
- [Arm](https://yams.yassrobotics.com/documentation/tutorials/arm.md): Learn how to program an Arm.
- [Step 1: The motor controller](https://yams.yassrobotics.com/documentation/tutorials/arm/motor-controller.md): Configure the SparkMax and wrap it in a SmartMotorController.
- [Step 2: The arm](https://yams.yassrobotics.com/documentation/tutorials/arm/mechanism.md): Describe the arm and create the Arm mechanism.
- [Step 3: Commands and buttons](https://yams.yassrobotics.com/documentation/tutorials/arm/commands.md): Make commands from the Arm and bind them to controller buttons.
- [Step 4: Simulate it](https://yams.yassrobotics.com/documentation/tutorials/arm/simulate.md): Run the arm in simulation and drive it with a controller.
- [Elevator](https://yams.yassrobotics.com/documentation/tutorials/elevator.md): Learn how to program an Elevator.
- [Step 1: The motor controller](https://yams.yassrobotics.com/documentation/tutorials/elevator/motor-controller.md): Configure the SparkMax and wrap it in a SmartMotorController.
- [Step 2: The elevator](https://yams.yassrobotics.com/documentation/tutorials/elevator/mechanism.md): Describe the elevator and create the Elevator mechanism.
- [Step 3: Commands and buttons](https://yams.yassrobotics.com/documentation/tutorials/elevator/commands.md): Make commands from the Elevator and bind them to controller buttons.
- [Step 4: Simulate it](https://yams.yassrobotics.com/documentation/tutorials/elevator/simulate.md): Run the elevator in simulation and drive it with a controller.
- [Shooter/FlyWheels](https://yams.yassrobotics.com/documentation/tutorials/shooter-flywheels.md): We will learn how to program a Shooter!
- [Step 1: The motor controller](https://yams.yassrobotics.com/documentation/tutorials/shooter-flywheels/motor-controller.md): Configure the SparkMax and wrap it in a SmartMotorController.
- [Step 2: The flywheel](https://yams.yassrobotics.com/documentation/tutorials/shooter-flywheels/mechanism.md): Describe the flywheel and create the FlyWheel mechanism.
- [Step 3: Commands and buttons](https://yams.yassrobotics.com/documentation/tutorials/shooter-flywheels/commands.md): Make commands from the FlyWheel and bind them to controller buttons.
- [Step 4: Simulate it](https://yams.yassrobotics.com/documentation/tutorials/shooter-flywheels/simulate.md): Run the flywheel in simulation and drive it with a controller.
- [Double FlyWheel](https://yams.yassrobotics.com/documentation/tutorials/double-flywheel.md): We will learn how to program a Double FlyWheel shooter!
- [Step 1: Two motor controllers](https://yams.yassrobotics.com/documentation/tutorials/double-flywheel/motor-controllers.md): One config and one SmartMotorController for each flywheel.
- [Step 2: Commands and buttons](https://yams.yassrobotics.com/documentation/tutorials/double-flywheel/commands.md): One command sets both flywheel speeds. Presets give no spin, backspin or topspin.
- [Step 3: Spin control and followers](https://yams.yassrobotics.com/documentation/tutorials/double-flywheel/spin-and-followers.md): A spin ratio between the two flywheels, and what to do when they share a shaft.
- [Swerve Drive](https://yams.yassrobotics.com/documentation/tutorials/swerve-drive.md): Learn how to program a Swerve Drive.
- [Step 1: The module motors](https://yams.yassrobotics.com/documentation/tutorials/swerve-drive/module-motors.md): A SmartMotorControllerConfig for the drive motors and one for the azimuth motors.
- [Step 2: The modules and the drive](https://yams.yassrobotics.com/documentation/tutorials/swerve-drive/modules-and-drive.md): Build four SwerveModules, add the gyro, and create the SwerveDrive.
- [Step 3: Driving](https://yams.yassrobotics.com/documentation/tutorials/swerve-drive/driving.md): Drive commands, a SwerveInputStream for the sticks, and the bindings.
