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