diff options
Diffstat (limited to 'src/org/usfirst/frc/team4272/robotlib/RollingAvg.java')
-rw-r--r-- | src/org/usfirst/frc/team4272/robotlib/RollingAvg.java | 61 |
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(); |