001/*
002 * Copyright (c) 2021 REV Robotics
003 *
004 * Redistribution and use in source and binary forms, with or without
005 * modification, are permitted provided that the following conditions are met:
006 *
007 * 1. Redistributions of source code must retain the above copyright notice,
008 *    this list of conditions and the following disclaimer.
009 * 2. Redistributions in binary form must reproduce the above copyright
010 *    notice, this list of conditions and the following disclaimer in the
011 *    documentation and/or other materials provided with the distribution.
012 * 3. Neither the name of REV Robotics nor the names of its
013 *    contributors may be used to endorse or promote products derived from
014 *    this software without specific prior written permission.
015 *
016 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
017 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
018 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
019 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
020 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
021 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
022 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
023 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
024 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
025 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
026 * POSSIBILITY OF SUCH DAMAGE.
027 */
028
029package com.revrobotics;
030
031/**
032 * Get an instance of this interface by using {@link
033 * CANSparkMax#getAnalog(SparkMaxAnalogSensor.Mode)}.
034 */
035public interface AnalogInput {
036  /**
037   * Get the voltage of the analog sensor.
038   *
039   * @return Voltage of the sensor.
040   */
041  double getVoltage();
042
043  /**
044   * Get the position of the sensor. Returns value in the native unit of 'volt' by default, and can
045   * be changed by a scale factor using setPositionConversionFactor().
046   *
047   * @return Position of the sensor
048   */
049  double getPosition();
050
051  /**
052   * Set the conversion factor for the position of the analog sensor. By default, revolutions per
053   * volt is 1. Changing the position conversion factor will also change the position units.
054   *
055   * @param factor The conversion factor which will be multiplied by volts
056   * @return {@link REVLibError#kOk} if successful
057   */
058  REVLibError setPositionConversionFactor(double factor);
059
060  /**
061   * Get the current conversion factor for the position of the analog sensor.
062   *
063   * @return Analog position conversion factor
064   */
065  double getPositionConversionFactor();
066}