-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Added port numbers and slightly tuned pid
- Loading branch information
1 parent
97b33fc
commit ea8cce0
Showing
12 changed files
with
348 additions
and
293 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,121 +1,122 @@ | ||
package frc.lib.utils; | ||
|
||
import frc.robot.Constants; | ||
// FROM 6328 Mechanical Advantage | ||
import java.util.Arrays; | ||
import java.util.HashMap; | ||
import java.util.Map; | ||
import java.util.function.Consumer; | ||
import org.littletonrobotics.junction.networktables.LoggedDashboardNumber; | ||
import frc.robot.Constants; | ||
// FROM 6328 Mechanical Advantage | ||
|
||
/** | ||
* Class for a tunable number. Gets value from dashboard in tuning mode, returns default if not or | ||
* value not in dashboard. | ||
*/ | ||
public class LoggedTunableNumber { | ||
private static final String tableKey = "TunableNumbers"; | ||
|
||
private final String key; | ||
private boolean hasDefault = false; | ||
private double defaultValue; | ||
private LoggedDashboardNumber dashboardNumber; | ||
private Map<Integer, Double> lastHasChangedValues = new HashMap<>(); | ||
private static final String tableKey = "TunableNumbers"; | ||
|
||
/** | ||
* Create a new LoggedTunableNumber | ||
* | ||
* @param dashboardKey Key on dashboard | ||
*/ | ||
public LoggedTunableNumber(String dashboardKey, String tableKey) { | ||
this.key = tableKey + "/" + dashboardKey; | ||
// this.key = tableKey + "/" + dashboardKey; | ||
} | ||
private final String key; | ||
private boolean hasDefault = false; | ||
private double defaultValue; | ||
private LoggedDashboardNumber dashboardNumber; | ||
private Map<Integer, Double> lastHasChangedValues = new HashMap<>(); | ||
|
||
/** | ||
* Create a new LoggedTunableNumber with the default value | ||
* | ||
* @param dashboardKey Key on dashboard | ||
* @param defaultValue Default value | ||
*/ | ||
public LoggedTunableNumber(String dashboardKey, double defaultValue) { | ||
this(dashboardKey, tableKey); | ||
initDefault(defaultValue); | ||
} | ||
/** | ||
* Create a new LoggedTunableNumber | ||
* | ||
* @param dashboardKey Key on dashboard | ||
*/ | ||
public LoggedTunableNumber(String dashboardKey, String tableKey) { | ||
this.key = tableKey + "/" + dashboardKey; | ||
// this.key = tableKey + "/" + dashboardKey; | ||
} | ||
|
||
public LoggedTunableNumber(String dashboardKey, double defaultValue, String tableKey) { | ||
this(dashboardKey, tableKey); | ||
initDefault(defaultValue); | ||
} | ||
/** | ||
* Create a new LoggedTunableNumber with the default value | ||
* | ||
* @param dashboardKey Key on dashboard | ||
* @param defaultValue Default value | ||
*/ | ||
public LoggedTunableNumber(String dashboardKey, double defaultValue) { | ||
this(dashboardKey, tableKey); | ||
initDefault(defaultValue); | ||
} | ||
|
||
/** | ||
* Set the default value of the number. The default value can only be set once. | ||
* | ||
* @param defaultValue The default value | ||
*/ | ||
public void initDefault(double defaultValue) { | ||
if (!hasDefault) { | ||
hasDefault = true; | ||
this.defaultValue = defaultValue; | ||
if (Constants.tuningMode) { | ||
dashboardNumber = new LoggedDashboardNumber(key, defaultValue); | ||
} | ||
} | ||
} | ||
public LoggedTunableNumber(String dashboardKey, double defaultValue, String tableKey) { | ||
this(dashboardKey, tableKey); | ||
initDefault(defaultValue); | ||
} | ||
|
||
/** | ||
* Get the current value, from dashboard if available and in tuning mode. | ||
* | ||
* @return The current value | ||
*/ | ||
public double get() { | ||
if (!hasDefault) { | ||
return 0.0; | ||
} else { | ||
return Constants.tuningMode ? dashboardNumber.get() : defaultValue; | ||
} | ||
/** | ||
* Set the default value of the number. The default value can only be set once. | ||
* | ||
* @param defaultValue The default value | ||
*/ | ||
public void initDefault(double defaultValue) { | ||
if (!hasDefault) { | ||
hasDefault = true; | ||
this.defaultValue = defaultValue; | ||
if (Constants.tuningMode) { | ||
dashboardNumber = new LoggedDashboardNumber(key, defaultValue); | ||
} | ||
} | ||
} | ||
|
||
public void set(double val){ | ||
dashboardNumber.set(val); | ||
/** | ||
* Get the current value, from dashboard if available and in tuning mode. | ||
* | ||
* @return The current value | ||
*/ | ||
public double get() { | ||
if (!hasDefault) { | ||
return 0.0; | ||
} else { | ||
return Constants.tuningMode ? dashboardNumber.get() : defaultValue; | ||
} | ||
} | ||
|
||
/** | ||
* Checks whether the number has changed since our last check | ||
* | ||
* @param id Unique identifier for the caller to avoid conflicts when shared between multiple | ||
* objects. Recommended approach is to pass the result of "hashCode()" | ||
* @return True if the number has changed since the last time this method was called, false | ||
* otherwise. | ||
*/ | ||
public boolean hasChanged(int id) { | ||
if (!Constants.tuningMode) return false; | ||
double currentValue = get(); | ||
Double lastValue = lastHasChangedValues.get(id); | ||
if (lastValue == null || currentValue != lastValue) { | ||
lastHasChangedValues.put(id, currentValue); | ||
return true; | ||
} | ||
public void set(double val) { | ||
dashboardNumber.set(val); | ||
} | ||
|
||
return false; | ||
/** | ||
* Checks whether the number has changed since our last check | ||
* | ||
* @param id Unique identifier for the caller to avoid conflicts when shared between multiple | ||
* objects. Recommended approach is to pass the result of "hashCode()" | ||
* @return True if the number has changed since the last time this method was called, false | ||
* otherwise. | ||
*/ | ||
public boolean hasChanged(int id) { | ||
if (!Constants.tuningMode) return false; | ||
double currentValue = get(); | ||
Double lastValue = lastHasChangedValues.get(id); | ||
if (lastValue == null || currentValue != lastValue) { | ||
lastHasChangedValues.put(id, currentValue); | ||
return true; | ||
} | ||
|
||
/** | ||
* Runs action if any of the tunableNumbers have changed | ||
* | ||
* @param id Unique identifier for the caller to avoid conflicts when shared between multiple * | ||
* objects. Recommended approach is to pass the result of "hashCode()" | ||
* @param action Callback to run when any of the tunable numbers have changed. Access tunable | ||
* numbers in order inputted in method | ||
* @param tunableNumbers All tunable numbers to check | ||
*/ | ||
public static void ifChanged( | ||
int id, Consumer<double[]> action, LoggedTunableNumber... tunableNumbers) { | ||
if (Arrays.stream(tunableNumbers).anyMatch(tunableNumber -> tunableNumber.hasChanged(id))) { | ||
action.accept(Arrays.stream(tunableNumbers).mapToDouble(LoggedTunableNumber::get).toArray()); | ||
} | ||
} | ||
return false; | ||
} | ||
|
||
/** Runs action if any of the tunableNumbers have changed */ | ||
public static void ifChanged(int id, Runnable action, LoggedTunableNumber... tunableNumbers) { | ||
ifChanged(id, values -> action.run(), tunableNumbers); | ||
/** | ||
* Runs action if any of the tunableNumbers have changed | ||
* | ||
* @param id Unique identifier for the caller to avoid conflicts when shared between multiple * | ||
* objects. Recommended approach is to pass the result of "hashCode()" | ||
* @param action Callback to run when any of the tunable numbers have changed. Access tunable | ||
* numbers in order inputted in method | ||
* @param tunableNumbers All tunable numbers to check | ||
*/ | ||
public static void ifChanged( | ||
int id, Consumer<double[]> action, LoggedTunableNumber... tunableNumbers) { | ||
if (Arrays.stream(tunableNumbers).anyMatch(tunableNumber -> tunableNumber.hasChanged(id))) { | ||
action.accept(Arrays.stream(tunableNumbers).mapToDouble(LoggedTunableNumber::get).toArray()); | ||
} | ||
} | ||
} | ||
|
||
/** Runs action if any of the tunableNumbers have changed */ | ||
public static void ifChanged(int id, Runnable action, LoggedTunableNumber... tunableNumbers) { | ||
ifChanged(id, values -> action.run(), tunableNumbers); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.