-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPIDFunctions.java
73 lines (60 loc) · 1.48 KB
/
PIDFunctions.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package org.firstinspires.ftc.teamcode;
/**
* @author Zack Horton
* @version 1.0
* @since 1.0
*/
public class PIDFunctions{
private double last = 0;
private double errorSum = 0;
private double current = 0;
private double target = 0;
private double kp = 0;
private double ki = 0;
private double kd = 0;
private double range = 0;
private double timeIn = 0;
private double timeInInput = 0;
public PIDFunctions(double c, double t, double p, double i, double d, double r, double in){
current = c;
target = t;
kp = p;
ki = i;
kd = d;
range = r;
timeIn = 0;
timeInInput = in;
}
public void setCurrent (double c){
current = c;
}
public double getError()
{
return current - target;
}
public double output() {
if(timeIn > timeInInput)
{
return 0;
}
double error = current - target;
if(Math.abs(error) < range) {
errorSum = 0;
timeIn++;
}
else {
errorSum += error;
timeIn = 0;
}
double proportionalTerm = kp * error;
double integralTerm = ki * errorSum;
double derivativeTerm = kd * (error - last);
last = current;
double result = proportionalTerm + integralTerm + derivativeTerm;
if (result == 0)
{
result += .0000001;
}
return result;
}
}