delay on missed position for updating edge counts. Makes sure we get two cycles before we calibrate to avoid spurious edges
diff --git a/frc971/control_loops/hall_effect_tracker.h b/frc971/control_loops/hall_effect_tracker.h
index 7e6617c..b63a34b 100644
--- a/frc971/control_loops/hall_effect_tracker.h
+++ b/frc971/control_loops/hall_effect_tracker.h
@@ -20,47 +20,42 @@
bool negedge_count_changed() const { return negedges_.count_changed(); }
bool value() const { return value_; }
+ bool last_value() const { return last_value_; }
void Update(const HallEffectStruct &position) {
+ last_value_ = value_;
value_ = position.current;
posedges_.update(position.posedge_count);
negedges_.update(position.negedge_count);
}
- void Reset() {
- posedges_.Reset();
- negedges_.Reset();
+ void Reset(const HallEffectStruct &position) {
+ posedges_.Reset(position.posedge_count);
+ negedges_.Reset(position.negedge_count);
+ value_ = position.current;
+ last_value_ = position.current;
}
- bool ready() { return posedges_.ready() && negedges_.ready(); }
-
private:
class {
public:
void update(int32_t count) {
- if (first_) {
- count_ = count;
- LOG(DEBUG, "First time through the hall effect, resetting\n");
- }
previous_count_ = count_;
count_ = count;
- first_ = false;
}
- void Reset() { first_ = true; }
+ void Reset(int32_t count) { count_ = count; }
- bool count_changed() const { return !first_ && previous_count_ != count_; }
+ bool count_changed() const { return previous_count_ != count_; }
int32_t count() const { return count_; }
- bool ready() { return !first_; }
-
private:
int32_t count_ = 0;
int32_t previous_count_ = 0;
- bool first_ = true;
} posedges_, negedges_;
bool value_ = false;
+ bool last_value_ = false;
};
} // namespace frc971