Valkyrie 2026
Loading...
Searching...
No Matches
CurrentSensor.h
1#pragma once
2
3#include <deque>
4#include <string>
5
6#include <frc/TimedRobot.h>
7#include <frc/filter/LinearFilter.h>
8
9#include "valkyrie/sensors/BaseSensor.h"
10
11namespace valor {
12namespace sensors {
13
20class CurrentSensor : public BaseSensor<units::ampere_t> {
21 public:
28 explicit CurrentSensor(units::ampere_t threshold);
29
35 void Reset() override;
36
42 inline void SetSpikeCallback(std::function<void()> cb) { callback = cb; }
43
49 void SetThreshold(units::ampere_t threshold);
50
51 inline units::ampere_t GetThreshold() const { return threshold; }
52
58 void SetFilterSize(int size);
59
65 inline void SetFilterTime(units::second_t time) { SetFilterSize(time / LOOP_PERIOD); }
66
67 protected:
73 void Calculate() override;
74
80 inline units::ampere_t GetAverage() const { return filter.LastValue(); }
81
82 void LoggablePeriodic() override;
83
84 private:
85 static constexpr int DEFAULT_CACHE_SIZE = 100_ms / LOOP_PERIOD;
86
87 frc::LinearFilter<units::ampere_t> filter = frc::LinearFilter<units::ampere_t>::MovingAverage(DEFAULT_CACHE_SIZE);
88 std::function<void()> callback;
89 units::ampere_t threshold;
90};
91
92} // namespace sensors
93} // namespace valor
Abstract class that all Valor sensors should implement.
Definition BaseSensor.h:52
void SetSpikeCallback(std::function< void()> cb)
Set a callback function to trigger when a current spike is detected.
Definition CurrentSensor.h:42
void SetFilterTime(units::second_t time)
Set the time interval of the rolling average cache.
Definition CurrentSensor.h:65
units::ampere_t GetAverage() const
Get the average current from the rolling cache.
Definition CurrentSensor.h:80
void SetThreshold(units::ampere_t threshold)
Set the threshold for detecting a current spike.
CurrentSensor(units::ampere_t threshold)
Construct a new CurrentSensor object.
void LoggablePeriodic() override
Periodic callback for logging updates.
void Calculate() override
Perform current sensor-specific calculations.
void Reset() override
Reset the sensor state.
void SetFilterSize(int size)
Set the size of the rolling average cache.