package com.team254.frc2015.subsystems.controllers; import com.team254.lib.util.Controller; public class BangBangFinishLineController extends Controller { private double m_position; private double m_goal; private double m_tolerance; private double m_direction = 0.0; public BangBangFinishLineController(double tolerance) { m_tolerance = tolerance; } public void setGoal(double goal) { m_goal = goal; } public double getGoal() { return m_goal; } @Override public void reset() { m_direction = 0.0; } @Override public boolean isOnTarget() { if (m_direction == 0.0) { return false; } return (m_direction > 0 ? m_position > (m_goal - m_tolerance) : m_position < (m_goal + m_tolerance)); } public double update(double position) { if (m_direction == 0.0) { m_direction = (position > m_goal ? -1.0 : 1.0); } m_position = position; if (m_direction > 0) { if (position < (m_goal - m_tolerance)) { return 1.0; } else { return 0.0; } } else { if (position > (m_goal + m_tolerance)) { return -1.0; } else { return 0.0; } } } }