001// Copyright (c) FIRST and other WPILib contributors. 002// Open Source Software; you can modify and/or share it under the terms of 003// the WPILib BSD license file in the root directory of this project. 004 005package edu.wpi.first.wpilibj; 006 007/** 008 * Interface for counting the number of ticks on a digital input channel. Encoders, Gear tooth 009 * sensors, and counters should all subclass this so it can be used to build more advanced classes 010 * for control and driving. 011 * 012 * <p>All counters will immediately start counting - reset() them if you need them to be zeroed 013 * before use. 014 */ 015public interface CounterBase { 016 /** The number of edges for the counterbase to increment or decrement on. */ 017 enum EncodingType { 018 /** Count only the rising edge. */ 019 k1X(0), 020 /** Count both the rising and falling edge. */ 021 k2X(1), 022 /** Count rising and falling on both channels. */ 023 k4X(2); 024 025 public final int value; 026 027 EncodingType(int value) { 028 this.value = value; 029 } 030 } 031 032 /** 033 * Get the count. 034 * 035 * @return the count 036 */ 037 int get(); 038 039 /** Reset the count to zero. */ 040 void reset(); 041 042 /** 043 * Get the time between the last two edges counted. 044 * 045 * @return the time between the last two ticks in seconds 046 */ 047 double getPeriod(); 048 049 /** 050 * Set the maximum time between edges to be considered stalled. 051 * 052 * @param maxPeriod the maximum period in seconds 053 */ 054 void setMaxPeriod(double maxPeriod); 055 056 /** 057 * Determine if the counter is not moving. 058 * 059 * @return true if the counter has not changed for the max period 060 */ 061 boolean getStopped(); 062 063 /** 064 * Determine which direction the counter is going. 065 * 066 * @return true for one direction, false for the other 067 */ 068 boolean getDirection(); 069}