From 55a7f2b4adfd448e2ec9344fad55e54741b60932 Mon Sep 17 00:00:00 2001 From: Prateek Machiraju Date: Mon, 11 Nov 2019 02:20:33 -0500 Subject: [PATCH] Add template for old command-based style (#2031) --- .../cpp/templates/oldcommandbased/cpp/OI.cpp | 12 ++ .../templates/oldcommandbased/cpp/Robot.cpp | 87 ++++++++++++ .../cpp/commands/ExampleCommand.cpp | 31 +++++ .../cpp/commands/MyAutoCommand.cpp | 31 +++++ .../cpp/subsystems/ExampleSubsystem.cpp | 20 +++ .../templates/oldcommandbased/include/OI.h | 13 ++ .../templates/oldcommandbased/include/Robot.h | 41 ++++++ .../oldcommandbased/include/RobotMap.h | 25 ++++ .../include/commands/ExampleCommand.h | 20 +++ .../include/commands/MyAutoCommand.h | 20 +++ .../include/subsystems/ExampleSubsystem.h | 20 +++ .../src/main/cpp/templates/templates.json | 10 ++ .../templates/oldcommandbased/Main.java | 29 ++++ .../wpilibj/templates/oldcommandbased/OI.java | 42 ++++++ .../templates/oldcommandbased/Robot.java | 131 ++++++++++++++++++ .../templates/oldcommandbased/RobotMap.java | 26 ++++ .../commands/ExampleCommand.java | 48 +++++++ .../subsystems/ExampleSubsystem.java | 25 ++++ .../first/wpilibj/templates/templates.json | 11 ++ 19 files changed, 642 insertions(+) create mode 100644 wpilibcExamples/src/main/cpp/templates/oldcommandbased/cpp/OI.cpp create mode 100644 wpilibcExamples/src/main/cpp/templates/oldcommandbased/cpp/Robot.cpp create mode 100644 wpilibcExamples/src/main/cpp/templates/oldcommandbased/cpp/commands/ExampleCommand.cpp create mode 100644 wpilibcExamples/src/main/cpp/templates/oldcommandbased/cpp/commands/MyAutoCommand.cpp create mode 100644 wpilibcExamples/src/main/cpp/templates/oldcommandbased/cpp/subsystems/ExampleSubsystem.cpp create mode 100644 wpilibcExamples/src/main/cpp/templates/oldcommandbased/include/OI.h create mode 100644 wpilibcExamples/src/main/cpp/templates/oldcommandbased/include/Robot.h create mode 100644 wpilibcExamples/src/main/cpp/templates/oldcommandbased/include/RobotMap.h create mode 100644 wpilibcExamples/src/main/cpp/templates/oldcommandbased/include/commands/ExampleCommand.h create mode 100644 wpilibcExamples/src/main/cpp/templates/oldcommandbased/include/commands/MyAutoCommand.h create mode 100644 wpilibcExamples/src/main/cpp/templates/oldcommandbased/include/subsystems/ExampleSubsystem.h create mode 100644 wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/templates/oldcommandbased/Main.java create mode 100644 wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/templates/oldcommandbased/OI.java create mode 100644 wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/templates/oldcommandbased/Robot.java create mode 100644 wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/templates/oldcommandbased/RobotMap.java create mode 100644 wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/templates/oldcommandbased/commands/ExampleCommand.java create mode 100644 wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/templates/oldcommandbased/subsystems/ExampleSubsystem.java diff --git a/wpilibcExamples/src/main/cpp/templates/oldcommandbased/cpp/OI.cpp b/wpilibcExamples/src/main/cpp/templates/oldcommandbased/cpp/OI.cpp new file mode 100644 index 0000000000..2a9ef504b9 --- /dev/null +++ b/wpilibcExamples/src/main/cpp/templates/oldcommandbased/cpp/OI.cpp @@ -0,0 +1,12 @@ +/*----------------------------------------------------------------------------*/ +/* Copyright (c) 2019 FIRST. All Rights Reserved. */ +/* Open Source Software - may be modified and shared by FRC teams. The code */ +/* must be accompanied by the FIRST BSD license file in the root directory of */ +/* the project. */ +/*----------------------------------------------------------------------------*/ + +#include "OI.h" + +OI::OI() { + // Process operator interface input here. +} diff --git a/wpilibcExamples/src/main/cpp/templates/oldcommandbased/cpp/Robot.cpp b/wpilibcExamples/src/main/cpp/templates/oldcommandbased/cpp/Robot.cpp new file mode 100644 index 0000000000..b2a88844f1 --- /dev/null +++ b/wpilibcExamples/src/main/cpp/templates/oldcommandbased/cpp/Robot.cpp @@ -0,0 +1,87 @@ +/*----------------------------------------------------------------------------*/ +/* Copyright (c) 2019 FIRST. All Rights Reserved. */ +/* Open Source Software - may be modified and shared by FRC teams. The code */ +/* must be accompanied by the FIRST BSD license file in the root directory of */ +/* the project. */ +/*----------------------------------------------------------------------------*/ + +#include "Robot.h" + +#include +#include + +ExampleSubsystem Robot::m_subsystem; +OI Robot::m_oi; + +void Robot::RobotInit() { + m_chooser.SetDefaultOption("Default Auto", &m_defaultAuto); + m_chooser.AddOption("My Auto", &m_myAuto); + frc::SmartDashboard::PutData("Auto Modes", &m_chooser); +} + +/** + * This function is called every robot packet, no matter the mode. Use + * this for items like diagnostics that you want ran during disabled, + * autonomous, teleoperated and test. + * + *

This runs after the mode specific periodic functions, but before + * LiveWindow and SmartDashboard integrated updating. + */ +void Robot::RobotPeriodic() {} + +/** + * This function is called once each time the robot enters Disabled mode. You + * can use it to reset any subsystem information you want to clear when the + * robot is disabled. + */ +void Robot::DisabledInit() {} + +void Robot::DisabledPeriodic() { frc::Scheduler::GetInstance()->Run(); } + +/** + * This autonomous (along with the chooser code above) shows how to select + * between different autonomous modes using the dashboard. The sendable chooser + * code works with the Java SmartDashboard. If you prefer the LabVIEW Dashboard, + * remove all of the chooser code and uncomment the GetString code to get the + * auto name from the text box below the Gyro. + * + * You can add additional auto modes by adding additional commands to the + * chooser code above (like the commented example) or additional comparisons to + * the if-else structure below with additional strings & commands. + */ +void Robot::AutonomousInit() { + // std::string autoSelected = frc::SmartDashboard::GetString( + // "Auto Selector", "Default"); + // if (autoSelected == "My Auto") { + // m_autonomousCommand = &m_myAuto; + // } else { + // m_autonomousCommand = &m_defaultAuto; + // } + + m_autonomousCommand = m_chooser.GetSelected(); + + if (m_autonomousCommand != nullptr) { + m_autonomousCommand->Start(); + } +} + +void Robot::AutonomousPeriodic() { frc::Scheduler::GetInstance()->Run(); } + +void Robot::TeleopInit() { + // This makes sure that the autonomous stops running when + // teleop starts running. If you want the autonomous to + // continue until interrupted by another command, remove + // this line or comment it out. + if (m_autonomousCommand != nullptr) { + m_autonomousCommand->Cancel(); + m_autonomousCommand = nullptr; + } +} + +void Robot::TeleopPeriodic() { frc::Scheduler::GetInstance()->Run(); } + +void Robot::TestPeriodic() {} + +#ifndef RUNNING_FRC_TESTS +int main() { return frc::StartRobot(); } +#endif diff --git a/wpilibcExamples/src/main/cpp/templates/oldcommandbased/cpp/commands/ExampleCommand.cpp b/wpilibcExamples/src/main/cpp/templates/oldcommandbased/cpp/commands/ExampleCommand.cpp new file mode 100644 index 0000000000..a5596ef80c --- /dev/null +++ b/wpilibcExamples/src/main/cpp/templates/oldcommandbased/cpp/commands/ExampleCommand.cpp @@ -0,0 +1,31 @@ +/*----------------------------------------------------------------------------*/ +/* Copyright (c) 2019 FIRST. All Rights Reserved. */ +/* Open Source Software - may be modified and shared by FRC teams. The code */ +/* must be accompanied by the FIRST BSD license file in the root directory of */ +/* the project. */ +/*----------------------------------------------------------------------------*/ + +#include "commands/ExampleCommand.h" + +#include "Robot.h" + +ExampleCommand::ExampleCommand() { + // Use Requires() here to declare subsystem dependencies + Requires(&Robot::m_subsystem); +} + +// Called just before this Command runs the first time +void ExampleCommand::Initialize() {} + +// Called repeatedly when this Command is scheduled to run +void ExampleCommand::Execute() {} + +// Make this return true when this Command no longer needs to run execute() +bool ExampleCommand::IsFinished() { return false; } + +// Called once after isFinished returns true +void ExampleCommand::End() {} + +// Called when another command which requires one or more of the same +// subsystems is scheduled to run +void ExampleCommand::Interrupted() {} diff --git a/wpilibcExamples/src/main/cpp/templates/oldcommandbased/cpp/commands/MyAutoCommand.cpp b/wpilibcExamples/src/main/cpp/templates/oldcommandbased/cpp/commands/MyAutoCommand.cpp new file mode 100644 index 0000000000..1389447a7f --- /dev/null +++ b/wpilibcExamples/src/main/cpp/templates/oldcommandbased/cpp/commands/MyAutoCommand.cpp @@ -0,0 +1,31 @@ +/*----------------------------------------------------------------------------*/ +/* Copyright (c) 2019 FIRST. All Rights Reserved. */ +/* Open Source Software - may be modified and shared by FRC teams. The code */ +/* must be accompanied by the FIRST BSD license file in the root directory of */ +/* the project. */ +/*----------------------------------------------------------------------------*/ + +#include "commands/MyAutoCommand.h" + +#include "Robot.h" + +MyAutoCommand::MyAutoCommand() { + // Use Requires() here to declare subsystem dependencies + Requires(&Robot::m_subsystem); +} + +// Called just before this Command runs the first time +void MyAutoCommand::Initialize() {} + +// Called repeatedly when this Command is scheduled to run +void MyAutoCommand::Execute() {} + +// Make this return true when this Command no longer needs to run execute() +bool MyAutoCommand::IsFinished() { return false; } + +// Called once after isFinished returns true +void MyAutoCommand::End() {} + +// Called when another command which requires one or more of the same +// subsystems is scheduled to run +void MyAutoCommand::Interrupted() {} diff --git a/wpilibcExamples/src/main/cpp/templates/oldcommandbased/cpp/subsystems/ExampleSubsystem.cpp b/wpilibcExamples/src/main/cpp/templates/oldcommandbased/cpp/subsystems/ExampleSubsystem.cpp new file mode 100644 index 0000000000..ed605500f5 --- /dev/null +++ b/wpilibcExamples/src/main/cpp/templates/oldcommandbased/cpp/subsystems/ExampleSubsystem.cpp @@ -0,0 +1,20 @@ +/*----------------------------------------------------------------------------*/ +/* Copyright (c) 2019 FIRST. All Rights Reserved. */ +/* Open Source Software - may be modified and shared by FRC teams. The code */ +/* must be accompanied by the FIRST BSD license file in the root directory of */ +/* the project. */ +/*----------------------------------------------------------------------------*/ + +#include "subsystems/ExampleSubsystem.h" + +#include "RobotMap.h" + +ExampleSubsystem::ExampleSubsystem() : frc::Subsystem("ExampleSubsystem") {} + +void ExampleSubsystem::InitDefaultCommand() { + // Set the default command for a subsystem here. + // SetDefaultCommand(new MySpecialCommand()); +} + +// Put methods for controlling this subsystem +// here. Call these from Commands. diff --git a/wpilibcExamples/src/main/cpp/templates/oldcommandbased/include/OI.h b/wpilibcExamples/src/main/cpp/templates/oldcommandbased/include/OI.h new file mode 100644 index 0000000000..77007bb1bd --- /dev/null +++ b/wpilibcExamples/src/main/cpp/templates/oldcommandbased/include/OI.h @@ -0,0 +1,13 @@ +/*----------------------------------------------------------------------------*/ +/* Copyright (c) 2019 FIRST. All Rights Reserved. */ +/* Open Source Software - may be modified and shared by FRC teams. The code */ +/* must be accompanied by the FIRST BSD license file in the root directory of */ +/* the project. */ +/*----------------------------------------------------------------------------*/ + +#pragma once + +class OI { + public: + OI(); +}; diff --git a/wpilibcExamples/src/main/cpp/templates/oldcommandbased/include/Robot.h b/wpilibcExamples/src/main/cpp/templates/oldcommandbased/include/Robot.h new file mode 100644 index 0000000000..94c2314e4d --- /dev/null +++ b/wpilibcExamples/src/main/cpp/templates/oldcommandbased/include/Robot.h @@ -0,0 +1,41 @@ +/*----------------------------------------------------------------------------*/ +/* Copyright (c) 2019 FIRST. All Rights Reserved. */ +/* Open Source Software - may be modified and shared by FRC teams. The code */ +/* must be accompanied by the FIRST BSD license file in the root directory of */ +/* the project. */ +/*----------------------------------------------------------------------------*/ + +#pragma once + +#include +#include +#include + +#include "OI.h" +#include "commands/ExampleCommand.h" +#include "commands/MyAutoCommand.h" +#include "subsystems/ExampleSubsystem.h" + +class Robot : public frc::TimedRobot { + public: + static ExampleSubsystem m_subsystem; + static OI m_oi; + + void RobotInit() override; + void RobotPeriodic() override; + void DisabledInit() override; + void DisabledPeriodic() override; + void AutonomousInit() override; + void AutonomousPeriodic() override; + void TeleopInit() override; + void TeleopPeriodic() override; + void TestPeriodic() override; + + private: + // Have it null by default so that if testing teleop it + // doesn't have undefined behavior and potentially crash. + frc::Command* m_autonomousCommand = nullptr; + ExampleCommand m_defaultAuto; + MyAutoCommand m_myAuto; + frc::SendableChooser m_chooser; +}; diff --git a/wpilibcExamples/src/main/cpp/templates/oldcommandbased/include/RobotMap.h b/wpilibcExamples/src/main/cpp/templates/oldcommandbased/include/RobotMap.h new file mode 100644 index 0000000000..875d3aa46c --- /dev/null +++ b/wpilibcExamples/src/main/cpp/templates/oldcommandbased/include/RobotMap.h @@ -0,0 +1,25 @@ +/*----------------------------------------------------------------------------*/ +/* Copyright (c) 2019 FIRST. All Rights Reserved. */ +/* Open Source Software - may be modified and shared by FRC teams. The code */ +/* must be accompanied by the FIRST BSD license file in the root directory of */ +/* the project. */ +/*----------------------------------------------------------------------------*/ + +#pragma once + +/** + * The RobotMap is a mapping from the ports sensors and actuators are wired into + * to a variable name. This provides flexibility changing wiring, makes checking + * the wiring easier and significantly reduces the number of magic numbers + * floating around. + */ + +// For example to map the left and right motors, you could define the +// following variables to use with your drivetrain subsystem. +// constexpr int kLeftMotor = 1; +// constexpr int kRightMotor = 2; + +// If you are using multiple modules, make sure to define both the port +// number and the module. For example you with a rangefinder: +// constexpr int kRangeFinderPort = 1; +// constexpr int kRangeFinderModule = 1; diff --git a/wpilibcExamples/src/main/cpp/templates/oldcommandbased/include/commands/ExampleCommand.h b/wpilibcExamples/src/main/cpp/templates/oldcommandbased/include/commands/ExampleCommand.h new file mode 100644 index 0000000000..558fcedc55 --- /dev/null +++ b/wpilibcExamples/src/main/cpp/templates/oldcommandbased/include/commands/ExampleCommand.h @@ -0,0 +1,20 @@ +/*----------------------------------------------------------------------------*/ +/* Copyright (c) 2019 FIRST. All Rights Reserved. */ +/* Open Source Software - may be modified and shared by FRC teams. The code */ +/* must be accompanied by the FIRST BSD license file in the root directory of */ +/* the project. */ +/*----------------------------------------------------------------------------*/ + +#pragma once + +#include + +class ExampleCommand : public frc::Command { + public: + ExampleCommand(); + void Initialize() override; + void Execute() override; + bool IsFinished() override; + void End() override; + void Interrupted() override; +}; diff --git a/wpilibcExamples/src/main/cpp/templates/oldcommandbased/include/commands/MyAutoCommand.h b/wpilibcExamples/src/main/cpp/templates/oldcommandbased/include/commands/MyAutoCommand.h new file mode 100644 index 0000000000..f1892a722c --- /dev/null +++ b/wpilibcExamples/src/main/cpp/templates/oldcommandbased/include/commands/MyAutoCommand.h @@ -0,0 +1,20 @@ +/*----------------------------------------------------------------------------*/ +/* Copyright (c) 2019 FIRST. All Rights Reserved. */ +/* Open Source Software - may be modified and shared by FRC teams. The code */ +/* must be accompanied by the FIRST BSD license file in the root directory of */ +/* the project. */ +/*----------------------------------------------------------------------------*/ + +#pragma once + +#include + +class MyAutoCommand : public frc::Command { + public: + MyAutoCommand(); + void Initialize() override; + void Execute() override; + bool IsFinished() override; + void End() override; + void Interrupted() override; +}; diff --git a/wpilibcExamples/src/main/cpp/templates/oldcommandbased/include/subsystems/ExampleSubsystem.h b/wpilibcExamples/src/main/cpp/templates/oldcommandbased/include/subsystems/ExampleSubsystem.h new file mode 100644 index 0000000000..0f7d470f05 --- /dev/null +++ b/wpilibcExamples/src/main/cpp/templates/oldcommandbased/include/subsystems/ExampleSubsystem.h @@ -0,0 +1,20 @@ +/*----------------------------------------------------------------------------*/ +/* Copyright (c) 2019 FIRST. All Rights Reserved. */ +/* Open Source Software - may be modified and shared by FRC teams. The code */ +/* must be accompanied by the FIRST BSD license file in the root directory of */ +/* the project. */ +/*----------------------------------------------------------------------------*/ + +#pragma once + +#include + +class ExampleSubsystem : public frc::Subsystem { + public: + ExampleSubsystem(); + void InitDefaultCommand() override; + + private: + // It's desirable that everything possible under private except + // for methods that implement subsystem capabilities +}; diff --git a/wpilibcExamples/src/main/cpp/templates/templates.json b/wpilibcExamples/src/main/cpp/templates/templates.json index 89ff989208..c31d41c1bd 100644 --- a/wpilibcExamples/src/main/cpp/templates/templates.json +++ b/wpilibcExamples/src/main/cpp/templates/templates.json @@ -38,5 +38,15 @@ "foldername": "commandbased", "gradlebase": "cpp", "commandversion": 2 + }, + { + "name": "Old Command Robot", + "description": "Old-Command style (deprecated)", + "tags": [ + "Command" + ], + "foldername": "oldcommandbased", + "gradlebase": "cpp", + "commandversion": 1 } ] diff --git a/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/templates/oldcommandbased/Main.java b/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/templates/oldcommandbased/Main.java new file mode 100644 index 0000000000..67d83777bf --- /dev/null +++ b/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/templates/oldcommandbased/Main.java @@ -0,0 +1,29 @@ +/*----------------------------------------------------------------------------*/ +/* Copyright (c) 2019 FIRST. All Rights Reserved. */ +/* Open Source Software - may be modified and shared by FRC teams. The code */ +/* must be accompanied by the FIRST BSD license file in the root directory of */ +/* the project. */ +/*----------------------------------------------------------------------------*/ + +package edu.wpi.first.wpilibj.templates.oldcommandbased; + +import edu.wpi.first.wpilibj.RobotBase; + +/** + * Do NOT add any static variables to this class, or any initialization at all. + * Unless you know what you are doing, do not modify this file except to + * change the parameter class to the startRobot call. + */ +public final class Main { + private Main() { + } + + /** + * Main initialization function. Do not perform any initialization here. + * + *

If you change your main robot class, change the parameter type. + */ + public static void main(String... args) { + RobotBase.startRobot(Robot::new); + } +} diff --git a/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/templates/oldcommandbased/OI.java b/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/templates/oldcommandbased/OI.java new file mode 100644 index 0000000000..d4c7f91c61 --- /dev/null +++ b/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/templates/oldcommandbased/OI.java @@ -0,0 +1,42 @@ +/*----------------------------------------------------------------------------*/ +/* Copyright (c) 2019 FIRST. All Rights Reserved. */ +/* Open Source Software - may be modified and shared by FRC teams. The code */ +/* must be accompanied by the FIRST BSD license file in the root directory of */ +/* the project. */ +/*----------------------------------------------------------------------------*/ + +package edu.wpi.first.wpilibj.templates.oldcommandbased; + +/** + * This class is the glue that binds the controls on the physical operator + * interface to the commands and command groups that allow control of the robot. + */ +public class OI { + //// CREATING BUTTONS + // One type of button is a joystick button which is any button on a + //// joystick. + // You create one by telling it which joystick it's on and which button + // number it is. + // Joystick stick = new Joystick(port); + // Button button = new JoystickButton(stick, buttonNumber); + + // There are a few additional built in buttons you can use. Additionally, + // by subclassing Button you can create custom triggers and bind those to + // commands the same as any other Button. + + //// TRIGGERING COMMANDS WITH BUTTONS + // Once you have a button, it's trivial to bind it to a button in one of + // three ways: + + // Start the command when the button is pressed and let it run the command + // until it is finished as determined by it's isFinished method. + // button.whenPressed(new ExampleCommand()); + + // Run the command while the button is being held down and interrupt it once + // the button is released. + // button.whileHeld(new ExampleCommand()); + + // Start the command when the button is released and let it run the command + // until it is finished as determined by it's isFinished method. + // button.whenReleased(new ExampleCommand()); +} diff --git a/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/templates/oldcommandbased/Robot.java b/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/templates/oldcommandbased/Robot.java new file mode 100644 index 0000000000..8f000ac16d --- /dev/null +++ b/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/templates/oldcommandbased/Robot.java @@ -0,0 +1,131 @@ +/*----------------------------------------------------------------------------*/ +/* Copyright (c) 2019 FIRST. All Rights Reserved. */ +/* Open Source Software - may be modified and shared by FRC teams. The code */ +/* must be accompanied by the FIRST BSD license file in the root directory of */ +/* the project. */ +/*----------------------------------------------------------------------------*/ + +package edu.wpi.first.wpilibj.templates.oldcommandbased; + +import edu.wpi.first.wpilibj.TimedRobot; +import edu.wpi.first.wpilibj.command.Command; +import edu.wpi.first.wpilibj.command.Scheduler; +import edu.wpi.first.wpilibj.smartdashboard.SendableChooser; +import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard; +import edu.wpi.first.wpilibj.templates.oldcommandbased.commands.ExampleCommand; +import edu.wpi.first.wpilibj.templates.oldcommandbased.subsystems.ExampleSubsystem; + +/** + * The VM is configured to automatically run this class, and to call the + * functions corresponding to each mode, as described in the TimedRobot + * documentation. If you change the name of this class or the package after + * creating this project, you must also update the build.gradle file in the + * project. + */ +public class Robot extends TimedRobot { + public static ExampleSubsystem m_subsystem = new ExampleSubsystem(); + public static OI m_oi; + + Command m_autonomousCommand; + SendableChooser m_chooser = new SendableChooser<>(); + + /** + * This function is run when the robot is first started up and should be + * used for any initialization code. + */ + @Override + public void robotInit() { + m_oi = new OI(); + m_chooser.setDefaultOption("Default Auto", new ExampleCommand()); + // chooser.addOption("My Auto", new MyAutoCommand()); + SmartDashboard.putData("Auto mode", m_chooser); + } + + /** + * This function is called every robot packet, no matter the mode. Use + * this for items like diagnostics that you want ran during disabled, + * autonomous, teleoperated and test. + * + *

This runs after the mode specific periodic functions, but before + * LiveWindow and SmartDashboard integrated updating. + */ + @Override + public void robotPeriodic() { + } + + /** + * This function is called once each time the robot enters Disabled mode. + * You can use it to reset any subsystem information you want to clear when + * the robot is disabled. + */ + @Override + public void disabledInit() { + } + + @Override + public void disabledPeriodic() { + Scheduler.getInstance().run(); + } + + /** + * This autonomous (along with the chooser code above) shows how to select + * between different autonomous modes using the dashboard. The sendable + * chooser code works with the Java SmartDashboard. If you prefer the + * LabVIEW Dashboard, remove all of the chooser code and uncomment the + * getString code to get the auto name from the text box below the Gyro + * + *

You can add additional auto modes by adding additional commands to the + * chooser code above (like the commented example) or additional comparisons + * to the switch structure below with additional strings & commands. + */ + @Override + public void autonomousInit() { + m_autonomousCommand = m_chooser.getSelected(); + + /* + * String autoSelected = SmartDashboard.getString("Auto Selector", + * "Default"); switch(autoSelected) { case "My Auto": autonomousCommand + * = new MyAutoCommand(); break; case "Default Auto": default: + * autonomousCommand = new ExampleCommand(); break; } + */ + + // schedule the autonomous command (example) + if (m_autonomousCommand != null) { + m_autonomousCommand.start(); + } + } + + /** + * This function is called periodically during autonomous. + */ + @Override + public void autonomousPeriodic() { + Scheduler.getInstance().run(); + } + + @Override + public void teleopInit() { + // This makes sure that the autonomous stops running when + // teleop starts running. If you want the autonomous to + // continue until interrupted by another command, remove + // this line or comment it out. + if (m_autonomousCommand != null) { + m_autonomousCommand.cancel(); + } + } + + /** + * This function is called periodically during operator control. + */ + @Override + public void teleopPeriodic() { + Scheduler.getInstance().run(); + } + + /** + * This function is called periodically during test mode. + */ + @Override + public void testPeriodic() { + } +} diff --git a/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/templates/oldcommandbased/RobotMap.java b/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/templates/oldcommandbased/RobotMap.java new file mode 100644 index 0000000000..9f33b02bce --- /dev/null +++ b/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/templates/oldcommandbased/RobotMap.java @@ -0,0 +1,26 @@ +/*----------------------------------------------------------------------------*/ +/* Copyright (c) 2019 FIRST. All Rights Reserved. */ +/* Open Source Software - may be modified and shared by FRC teams. The code */ +/* must be accompanied by the FIRST BSD license file in the root directory of */ +/* the project. */ +/*----------------------------------------------------------------------------*/ + +package edu.wpi.first.wpilibj.templates.oldcommandbased; + +/** + * The RobotMap is a mapping from the ports sensors and actuators are wired into + * to a variable name. This provides flexibility changing wiring, makes checking + * the wiring easier and significantly reduces the number of magic numbers + * floating around. + */ +public class RobotMap { + // For example to map the left and right motors, you could define the + // following variables to use with your drivetrain subsystem. + // public static int leftMotor = 1; + // public static int rightMotor = 2; + + // If you are using multiple modules, make sure to define both the port + // number and the module. For example you with a rangefinder: + // public static int rangefinderPort = 1; + // public static int rangefinderModule = 1; +} diff --git a/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/templates/oldcommandbased/commands/ExampleCommand.java b/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/templates/oldcommandbased/commands/ExampleCommand.java new file mode 100644 index 0000000000..0d84987d7c --- /dev/null +++ b/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/templates/oldcommandbased/commands/ExampleCommand.java @@ -0,0 +1,48 @@ +/*----------------------------------------------------------------------------*/ +/* Copyright (c) 2019 FIRST. All Rights Reserved. */ +/* Open Source Software - may be modified and shared by FRC teams. The code */ +/* must be accompanied by the FIRST BSD license file in the root directory of */ +/* the project. */ +/*----------------------------------------------------------------------------*/ + +package edu.wpi.first.wpilibj.templates.oldcommandbased.commands; + +import edu.wpi.first.wpilibj.command.Command; +import edu.wpi.first.wpilibj.templates.oldcommandbased.Robot; + +/** + * An example command. You can replace me with your own command. + */ +public class ExampleCommand extends Command { + public ExampleCommand() { + // Use requires() here to declare subsystem dependencies + requires(Robot.m_subsystem); + } + + // Called just before this Command runs the first time + @Override + protected void initialize() { + } + + // Called repeatedly when this Command is scheduled to run + @Override + protected void execute() { + } + + // Make this return true when this Command no longer needs to run execute() + @Override + protected boolean isFinished() { + return false; + } + + // Called once after isFinished returns true + @Override + protected void end() { + } + + // Called when another command which requires one or more of the same + // subsystems is scheduled to run + @Override + protected void interrupted() { + } +} diff --git a/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/templates/oldcommandbased/subsystems/ExampleSubsystem.java b/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/templates/oldcommandbased/subsystems/ExampleSubsystem.java new file mode 100644 index 0000000000..f3d1de9cb6 --- /dev/null +++ b/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/templates/oldcommandbased/subsystems/ExampleSubsystem.java @@ -0,0 +1,25 @@ +/*----------------------------------------------------------------------------*/ +/* Copyright (c) 2019 FIRST. All Rights Reserved. */ +/* Open Source Software - may be modified and shared by FRC teams. The code */ +/* must be accompanied by the FIRST BSD license file in the root directory of */ +/* the project. */ +/*----------------------------------------------------------------------------*/ + +package edu.wpi.first.wpilibj.templates.oldcommandbased.subsystems; + +import edu.wpi.first.wpilibj.command.Subsystem; + +/** + * An example subsystem. You can replace with me with your own subsystem. + */ +public class ExampleSubsystem extends Subsystem { + // Put methods for controlling this subsystem + // here. Call these from Commands. + + + @Override + protected void initDefaultCommand() { + // Set the default command for a subsystem here. + // setDefaultCommand(new MySpecialCommand()); + } +} diff --git a/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/templates/templates.json b/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/templates/templates.json index e909b0ac71..e0ebce781a 100644 --- a/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/templates/templates.json +++ b/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/templates/templates.json @@ -42,5 +42,16 @@ "gradlebase": "java", "mainclass": "Main", "commandversion": 2 + }, + { + "name": "Old Command Robot", + "description": "Old-command style (deprecated)", + "tags": [ + "Command" + ], + "foldername": "oldcommandbased", + "gradlebase": "java", + "mainclass": "Main", + "commandversion": 1 } ]