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