blob: 2584f3f4d6f5ff57f1c94564d75fc59b11abe41f [file] [log] [blame]
Brian Silverman26e4e522015-12-17 01:56:40 -05001/*----------------------------------------------------------------------------*/
2/* Copyright (c) FIRST 2014. All Rights Reserved. */
3/* Open Source Software - may be modified and shared by FRC teams. The code */
4/* must be accompanied by the FIRST BSD license file in $(WIND_BASE)/WPILib. */
5/*----------------------------------------------------------------------------*/
6
7#include <CANTalon.h>
8#include <Timer.h>
9#include "gtest/gtest.h"
10#include "TestBench.h"
11
12const int deviceId = 0;
13
14TEST(CANTalonTest, QuickTest) {
15 double throttle = 0.1;
16 CANTalon talon(deviceId);
17 talon.SetControlMode(CANSpeedController::kPercentVbus);
18 talon.EnableControl();
19 talon.Set(throttle);
20 Wait(0.25);
21 EXPECT_NEAR(talon.Get(), throttle, 5e-3);
22 talon.Set(-throttle);
23 Wait(0.25);
24 EXPECT_NEAR(talon.Get(), -throttle, 5e-3);
25
26 talon.Disable();
27 Wait(0.1);
28 EXPECT_FLOAT_EQ(talon.Get(), 0.0);
29}
30
31TEST(CANTalonTest, SetGetPID) {
32 // Tests that we can actually set and get PID values as intended.
33 CANTalon talon(deviceId);
34 double p = 0.05, i = 0.098, d = 1.23;
35 talon.SetPID(p, i, d);
36 // Wait(0.03);
37 EXPECT_NEAR(p, talon.GetP(), 1e-5);
38 EXPECT_NEAR(i, talon.GetI(), 1e-5);
39 EXPECT_NEAR(d, talon.GetD(), 1e-5);
40 // Test with new values in case the talon was already set to the previous
41 // ones.
42 p = 0.15;
43 i = 0.198;
44 d = 1.03;
45 talon.SetPID(p, i, d);
46 // Wait(0.03);
47 EXPECT_NEAR(p, talon.GetP(), 1e-5);
48 EXPECT_NEAR(i, talon.GetI(), 1e-5);
49 EXPECT_NEAR(d, talon.GetD(), 1e-5);
50}
51
52TEST(CANTalonTest, DISABLED_PositionModeWorks) {
53 CANTalon talon(deviceId);
54 talon.SetFeedbackDevice(CANTalon::AnalogPot);
55 talon.SetControlMode(CANSpeedController::kPosition);
56 Wait(0.1);
57 double p = 2;
58 double i = 0.00;
59 double d = 0.00;
60 Wait(0.2);
61 talon.SetControlMode(CANSpeedController::kPosition);
62 talon.SetFeedbackDevice(CANTalon::AnalogPot);
63 talon.SetPID(p, i, d);
64 Wait(0.2);
65 talon.Set(100);
66 Wait(100);
67 talon.Disable();
68 EXPECT_NEAR(talon.Get(), 500, 1000);
69}