From 1bb09a8298d18927609964b5abb39b26a356247c Mon Sep 17 00:00:00 2001 From: Wesley28w Date: Sat, 18 Apr 2026 18:48:57 -0700 Subject: [PATCH] making battery but need more info --- src/main/java/frc/robot/RobotContainer.java | 2 +- .../subsystems/PowerControl/Battery.java | 28 +++++++++++++++++++ .../PowerControl/BatteryConstants.java | 5 ++++ .../BreakerConstants.java | 4 ++- .../{Breaker => PowerControl}/EMABreaker.java | 16 ++++++++--- 5 files changed, 49 insertions(+), 6 deletions(-) create mode 100644 src/main/java/frc/robot/subsystems/PowerControl/Battery.java create mode 100644 src/main/java/frc/robot/subsystems/PowerControl/BatteryConstants.java rename src/main/java/frc/robot/subsystems/{Breaker => PowerControl}/BreakerConstants.java (84%) rename src/main/java/frc/robot/subsystems/{Breaker => PowerControl}/EMABreaker.java (89%) diff --git a/src/main/java/frc/robot/RobotContainer.java b/src/main/java/frc/robot/RobotContainer.java index ef1aa53..fa920ae 100644 --- a/src/main/java/frc/robot/RobotContainer.java +++ b/src/main/java/frc/robot/RobotContainer.java @@ -37,10 +37,10 @@ import frc.robot.constants.VisionConstants; import frc.robot.controls.BaseDriverConfig; import frc.robot.controls.Operator; import frc.robot.controls.PS5ControllerDriverConfig; -import frc.robot.subsystems.Breaker.EMABreaker; import frc.robot.subsystems.Climb.LinearClimb; import frc.robot.subsystems.Intake.Intake; import frc.robot.subsystems.LED.LED; +import frc.robot.subsystems.PowerControl.EMABreaker; import frc.robot.subsystems.drivetrain.Drivetrain; import frc.robot.subsystems.drivetrain.GyroIOPigeon2; import frc.robot.subsystems.hood.Hood; diff --git a/src/main/java/frc/robot/subsystems/PowerControl/Battery.java b/src/main/java/frc/robot/subsystems/PowerControl/Battery.java new file mode 100644 index 0000000..fcb5221 --- /dev/null +++ b/src/main/java/frc/robot/subsystems/PowerControl/Battery.java @@ -0,0 +1,28 @@ +package frc.robot.subsystems.PowerControl; + +import edu.wpi.first.wpilibj.PowerDistribution; +import edu.wpi.first.wpilibj.RobotController; +import edu.wpi.first.wpilibj2.command.SubsystemBase; + +public class Battery extends SubsystemBase { + private double voltage; + public Battery() { + updateVoltageFromBattery(); + } + + private void updateVoltageFromBattery() { + voltage = RobotController.getBatteryVoltage(); + } + public double getVoltage() { return voltage; } + + public double voltsTillBrownOut() { return voltage - RobotController.getBrownoutVoltage(); } + public double toBrownOut() { + // percent of volts we've got left over what we had to start with + return voltsTillBrownOut() / (BatteryConstants.MAX_STARTING_VOLTS - RobotController.getBrownoutVoltage()); + } + + @Override + public void periodic() { + updateVoltageFromBattery(); + } +} diff --git a/src/main/java/frc/robot/subsystems/PowerControl/BatteryConstants.java b/src/main/java/frc/robot/subsystems/PowerControl/BatteryConstants.java new file mode 100644 index 0000000..0f83c59 --- /dev/null +++ b/src/main/java/frc/robot/subsystems/PowerControl/BatteryConstants.java @@ -0,0 +1,5 @@ +package frc.robot.subsystems.PowerControl; + +public class BatteryConstants { + public static final double MAX_STARTING_VOLTS = 12.5; // V +} diff --git a/src/main/java/frc/robot/subsystems/Breaker/BreakerConstants.java b/src/main/java/frc/robot/subsystems/PowerControl/BreakerConstants.java similarity index 84% rename from src/main/java/frc/robot/subsystems/Breaker/BreakerConstants.java rename to src/main/java/frc/robot/subsystems/PowerControl/BreakerConstants.java index 99eb2a7..8d57e45 100644 --- a/src/main/java/frc/robot/subsystems/Breaker/BreakerConstants.java +++ b/src/main/java/frc/robot/subsystems/PowerControl/BreakerConstants.java @@ -1,4 +1,4 @@ -package frc.robot.subsystems.Breaker; +package frc.robot.subsystems.PowerControl; import java.util.LinkedHashMap; import java.util.Map; @@ -13,6 +13,8 @@ public class BreakerConstants { THRESHOLDS.put(30.0, 1.5 * 120); } + public static final double WARNING_PERCENTAGE = 0.6; // percent that the system reacts to approaching thresholds + // ports public static int[] DRIVETRAIN_PORTS = {8,9,10,11,18,19,0,1}; // bls, bld, fld, fls, frs, frd, brd, brs public static int[] TURRET_PORTS = {2}; diff --git a/src/main/java/frc/robot/subsystems/Breaker/EMABreaker.java b/src/main/java/frc/robot/subsystems/PowerControl/EMABreaker.java similarity index 89% rename from src/main/java/frc/robot/subsystems/Breaker/EMABreaker.java rename to src/main/java/frc/robot/subsystems/PowerControl/EMABreaker.java index f823ab6..48f7692 100644 --- a/src/main/java/frc/robot/subsystems/Breaker/EMABreaker.java +++ b/src/main/java/frc/robot/subsystems/PowerControl/EMABreaker.java @@ -1,4 +1,4 @@ -package frc.robot.subsystems.Breaker; +package frc.robot.subsystems.PowerControl; import java.util.ArrayList; import java.util.List; @@ -80,7 +80,7 @@ public class EMABreaker extends SubsystemBase { // total stuff Logger.recordOutput("Breaker/TotalCurrent", current); - Logger.recordOutput("Breaker/OverCurrent", isOverCurrent()); + Logger.recordOutput("Breaker/OverCurrent", isInWarning()); } public double getAverageCurrentDraw(int[] ports) { @@ -99,12 +99,20 @@ public class EMABreaker extends SubsystemBase { return pDis.getAllCurrents(); } - public boolean isOverCurrent() { + public boolean isInWarning() { for (Current f : filters) { - if (f.average > f.threshold) { + if (f.average > f.threshold * BreakerConstants.WARNING_PERCENTAGE) { return true; // uh oh } } return false; } + + public double percentageUsage() { + double sumAvg = 0; + for (Current f : filters) { + sumAvg += f.average / f.threshold; // gets percentage of us + } + return sumAvg / filters.size(); // average across filters + } } -- 2.39.5