summaryrefslogtreecommitdiff
path: root/src/org/usfirst/frc/team4272/robotlib/RollingAvg.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/org/usfirst/frc/team4272/robotlib/RollingAvg.java')
-rw-r--r--src/org/usfirst/frc/team4272/robotlib/RollingAvg.java61
1 files changed, 59 insertions, 2 deletions
diff --git a/src/org/usfirst/frc/team4272/robotlib/RollingAvg.java b/src/org/usfirst/frc/team4272/robotlib/RollingAvg.java
index 7f0af11..c052099 100644
--- a/src/org/usfirst/frc/team4272/robotlib/RollingAvg.java
+++ b/src/org/usfirst/frc/team4272/robotlib/RollingAvg.java
@@ -1,5 +1,5 @@
/**
- * Copyright (c) 2011, 2016 Luke Shumaker
+ * Copyright (c) 2011, 2016-2017 Luke Shumaker
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -33,7 +33,7 @@ import edu.wpi.first.wpilibj.PIDSourceType;
import edu.wpi.first.wpilibj.PIDOutput;
/**
- * TODO: Write JavaDocs
+ * RollingAvg implements a rolling average.
*/
public class RollingAvg implements PIDSource, PIDOutput {
private PIDSource source = null;
@@ -41,16 +41,44 @@ public class RollingAvg implements PIDSource, PIDOutput {
private double avg;
private int i;
+ /**
+ * Construct a RollingAvg that must be updated with the
+ * {@link #push(double)} or {@link #pidWrite(double)} methods.
+ *
+ * @param len The number of samples to keep in the average.
+ */
public RollingAvg(int len) {
points = new double[len];
i = 0;
avg = 0;
}
+ /**
+ * Construct a RollingAvg that will automatically update
+ * itself from a {@link PIDSource} each time {@link #pidGet()}
+ * is called.
+ *
+ * That is, it wraps the {@link PIDSource} to stabalize any
+ * noise.
+ *
+ * If {@link #pidGet()} is not called an iteration, then it is
+ * not updated that iteration; so be sure to call it each
+ * iteration whether or not you actually care about the value.
+ *
+ * @param len The number of samples to keep in the average.
+ * @param src The underlying PIDSource to read from.
+ */
public RollingAvg(int len, PIDSource src) {
this(len);
source = src;
}
+ /**
+ * Push a new value on to the rolling average (pushing out a
+ * previous value).
+ *
+ * @param v The new value to push.
+ * @return The new average after pushing v.
+ */
public double push(double v) {
avg -= points[i];
points[i] = v/points.length;
@@ -59,10 +87,26 @@ public class RollingAvg implements PIDSource, PIDOutput {
return avg;
}
+ /**
+ * Return the current value of the rolling average, without
+ * mutating anything.
+ *
+ * @return The current value of the rolling average.
+ */
public double get() {
return avg;
}
+ /**
+ * If constructed with an underlying {@link PIDSource}, read from it
+ * and push the value; returning the new average after pushing
+ * that value.
+ *
+ * If not constructed with an underlying {@link PIDSource},
+ * then this is simply an alias for {@link #get()}.
+ *
+ * @return The value of the rolling average.
+ */
public double pidGet() {
if (source!=null)
return push(source.pidGet());
@@ -70,15 +114,28 @@ public class RollingAvg implements PIDSource, PIDOutput {
return get();
}
+ /**
+ * An alias for {@link #push(double)} (but doesn't return the
+ * new average), in order to implement the {@link PIDOutput}
+ * interface.
+ *
+ * @param output The value to push.
+ */
public void pidWrite(double output) {
push(output);
}
+ /**
+ * See the documentation for {@link PIDSource#setPIDSourceType(PIDSourceType)}.
+ */
public void setPIDSourceType(PIDSourceType srcType) {
if (source!=null)
source.setPIDSourceType(srcType);
}
+ /**
+ * See the documentation for {@link PIDSource#getPIDSourceType}.
+ */
public PIDSourceType getPIDSourceType() {
if (source!=null)
return source.getPIDSourceType();