2016-01-28 11:33:19 -05:00
|
|
|
#include "WPILib.h"
|
|
|
|
#include "TankDrive.h"
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This sample shows how to use the new CANTalon to just run a motor in a basic
|
|
|
|
* throttle mode, in the same manner as you might control a traditional PWM
|
|
|
|
* controlled motor.
|
|
|
|
*
|
|
|
|
*/
|
2016-01-28 15:47:56 -05:00
|
|
|
class Robot : public IterativeRobot {
|
|
|
|
CANTalon r1_drive;
|
|
|
|
CANTalon r2_drive;
|
|
|
|
CANTalon l1_drive;
|
|
|
|
CANTalon l2_drive;
|
2016-02-01 15:16:25 -05:00
|
|
|
CANTalon shooter1;
|
|
|
|
CANTalon shooter2;
|
2016-01-28 16:47:25 -05:00
|
|
|
RobotDrive drivetrain1;
|
|
|
|
RobotDrive drivetrain2;
|
2016-01-28 11:33:19 -05:00
|
|
|
|
2016-02-01 15:16:25 -05:00
|
|
|
Joystick rstick, lstick;
|
2016-01-28 11:33:19 -05:00
|
|
|
|
|
|
|
// update every 0.01 seconds/10 milliseconds.
|
|
|
|
// The talon only receives control packets every 10ms.
|
2016-01-28 15:47:56 -05:00
|
|
|
//double kUpdatePeriod = 0.010;
|
2016-01-28 11:33:19 -05:00
|
|
|
|
|
|
|
public:
|
|
|
|
Robot()
|
2016-01-28 15:47:56 -05:00
|
|
|
: r1_drive(1), // Initialize the Talon as device 1. Use the roboRIO web
|
|
|
|
r2_drive(2), // interface to change the device number on the talons.
|
|
|
|
l1_drive(3),
|
|
|
|
l2_drive(4),
|
2016-02-01 15:16:25 -05:00
|
|
|
shooter1(10),
|
|
|
|
shooter2(11),
|
2016-01-28 16:47:25 -05:00
|
|
|
drivetrain1(l1_drive, r1_drive),
|
|
|
|
drivetrain2(l2_drive, r2_drive),
|
2016-02-01 15:16:25 -05:00
|
|
|
rstick(0),
|
|
|
|
lstick(1)
|
2016-01-28 15:47:56 -05:00
|
|
|
{
|
|
|
|
printf("Initializing Robot...");
|
|
|
|
printf("Initializing TankDrive");
|
2016-01-28 16:47:25 -05:00
|
|
|
//drive = new TankDrive(&l1_drive, &l2_drive, &r1_drive, &r2_drive);
|
2016-01-28 15:47:56 -05:00
|
|
|
printf("Ready!");
|
2016-01-28 16:47:25 -05:00
|
|
|
//l1_drive.SetInverted(true);
|
|
|
|
//l2_drive.SetInverted(true);
|
|
|
|
//l1_drive.Set(0, 0);
|
|
|
|
//l2_drive.Set(0, 0);
|
|
|
|
//r1_drive.Set(0, 1);
|
|
|
|
//r2_drive.Set(0, 1);
|
2016-01-28 15:47:56 -05:00
|
|
|
}
|
2016-01-28 11:33:19 -05:00
|
|
|
|
2016-01-28 15:47:56 -05:00
|
|
|
void DisabledInit()
|
|
|
|
{
|
2016-01-28 16:47:25 -05:00
|
|
|
r1_drive.SetSafetyEnabled(false);
|
|
|
|
r2_drive.SetSafetyEnabled(false);
|
|
|
|
l1_drive.SetSafetyEnabled(false);
|
|
|
|
l2_drive.SetSafetyEnabled(false);
|
2016-02-01 15:16:25 -05:00
|
|
|
shooter1.SetSafetyEnabled(false);
|
|
|
|
shooter2.SetSafetyEnabled(false);
|
2016-01-28 15:47:56 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
void TeleopInit()
|
|
|
|
{
|
|
|
|
printf("Starting Teleop mode");
|
|
|
|
r1_drive.Enable();
|
|
|
|
r2_drive.Enable();
|
|
|
|
l1_drive.Enable();
|
|
|
|
l2_drive.Enable();
|
|
|
|
|
2016-01-28 16:47:25 -05:00
|
|
|
|
|
|
|
|
2016-01-28 15:47:56 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
void TeleopPeriodic()
|
|
|
|
{
|
|
|
|
printf("Teleop Periodic Start.");
|
2016-02-01 15:16:25 -05:00
|
|
|
float speed = lstick.GetY() * ((1.0 - (lstick.GetThrottle()))/2.0);
|
|
|
|
float rot = lstick.GetX();
|
2016-01-28 16:47:25 -05:00
|
|
|
|
|
|
|
drivetrain1.ArcadeDrive(speed, rot, false);
|
|
|
|
drivetrain2.ArcadeDrive(speed, rot, false);
|
2016-02-01 15:16:25 -05:00
|
|
|
|
|
|
|
float power = (1.0 - rstick.GetThrottle()) / 2.0;
|
|
|
|
shooter1.Set(power);
|
|
|
|
shooter2.Set(power);
|
|
|
|
|
|
|
|
printf("~Teleop Periodic End.");
|
|
|
|
|
|
|
|
|
2016-01-28 15:47:56 -05:00
|
|
|
}
|
2016-01-28 11:33:19 -05:00
|
|
|
/**
|
|
|
|
* Runs the motor from the output of a Joystick.
|
2016-01-28 15:47:56 -05:00
|
|
|
*
|
2016-01-28 11:33:19 -05:00
|
|
|
void OperatorControl() {
|
|
|
|
while (IsOperatorControl() && IsEnabled()) {
|
|
|
|
// Do Drive.
|
2016-01-28 15:47:56 -05:00
|
|
|
std::cerr << "In Operator Control";
|
|
|
|
drive->Drive(&m_stick);
|
2016-01-28 11:33:19 -05:00
|
|
|
Wait(kUpdatePeriod); // Wait a bit so that the loop doesn't lock everything up.
|
|
|
|
}
|
2016-01-28 15:47:56 -05:00
|
|
|
}*/
|
|
|
|
|
2016-01-28 16:47:25 -05:00
|
|
|
//TankDrive *drive;
|
2016-01-28 11:33:19 -05:00
|
|
|
};
|
|
|
|
|
|
|
|
START_ROBOT_CLASS(Robot)
|