Source code for wpilib.analogtrigger

#----------------------------------------------------------------------------
# Copyright (c) FIRST 2008-2012. All Rights Reserved.
# Open Source Software - may be modified and shared by FRC teams. The code
# must be accompanied by the FIRST BSD license file in the root directory of
# the project.
#----------------------------------------------------------------------------

import hal
import weakref

from .analogtriggeroutput import AnalogTriggerOutput
from .resource import Resource

__all__ = ["AnalogTrigger"]

def _freeAnalogTrigger(port):
    hal.cleanAnalogTrigger(port)

[docs]class AnalogTrigger: """ Converts an analog signal into a digital signal An analog trigger is a way to convert an analog signal into a digital signal using resources built into the FPGA. The resulting digital signal can then be used directly or fed into other digital components of the FPGA such as the counter or encoder modules. The analog trigger module works by comparing analog signals to a voltage range set by the code. The specific return types and meanings depend on the analog trigger mode in use. .. not_implemented: initTrigger """ AnalogTriggerType = AnalogTriggerOutput.AnalogTriggerType def __init__(self, channel): """Constructor for an analog trigger given a channel number or analog input. :param channel: the port index or :class:`.AnalogInput` to use for the analog trigger. Treated as an AnalogInput if the provided object has a getChannel function. """ if hasattr(channel, "getChannel"): channel = channel.getChannel() port = hal.getPort(channel) self._port, self.index = hal.initializeAnalogTrigger(port) self._analogtrigger_finalizer = \ weakref.finalize(self, _freeAnalogTrigger, self._port) # Need this to free on unit test wpilib reset Resource._add_global_resource(self) hal.HALReport(hal.HALUsageReporting.kResourceType_AnalogTrigger, channel) @property
[docs] def port(self): if not self._analogtrigger_finalizer.alive: return None return self._port
[docs] def free(self): """Release the resources used by this object""" self._analogtrigger_finalizer()
[docs] def setLimitsRaw(self, lower, upper): """Set the upper and lower limits of the analog trigger. The limits are given in ADC codes. If oversampling is used, the units must be scaled appropriately. :param lower: the lower raw limit :param upper: the upper raw limit """ if lower > upper: raise ValueError("Lower bound is greater than upper") if self.port is None: raise ValueError("operation on freed port") hal.setAnalogTriggerLimitsRaw(self.port, lower, upper)
[docs] def setLimitsVoltage(self, lower, upper): """Set the upper and lower limits of the analog trigger. The limits are given as floating point voltage values. :param lower: the lower voltage limit :param upper: the upper voltage limit """ if lower > upper: raise ValueError("Lower bound is greater than upper") if self.port is None: raise ValueError("operation on freed port") hal.setAnalogTriggerLimitsVoltage(self.port, float(lower), float(upper))
[docs] def setAveraged(self, useAveragedValue): """Configure the analog trigger to use the averaged vs. raw values. If the value is true, then the averaged value is selected for the analog trigger, otherwise the immediate value is used. :param useAveragedValue: True to use an averaged value, False otherwise """ if self.port is None: raise ValueError("operation on freed port") hal.setAnalogTriggerAveraged(self.port, useAveragedValue)
[docs] def setFiltered(self, useFilteredValue): """Configure the analog trigger to use a filtered value. The analog trigger will operate with a 3 point average rejection filter. This is designed to help with 360 degree pot applications for the period where the pot crosses through zero. :param useFilteredValue: True to use a filterd value, False otherwise """ if self.port is None: raise ValueError("operation on freed port") hal.setAnalogTriggerFiltered(self.port, useFilteredValue)
[docs] def getIndex(self): """Return the index of the analog trigger. This is the FPGA index of this analog trigger instance. :returns: The index of the analog trigger. """ if self.port is None: raise ValueError("operation on freed port") return self.index
[docs] def getInWindow(self): """Return the InWindow output of the analog trigger. True if the analog input is between the upper and lower limits. :returns: The InWindow output of the analog trigger. """ if self.port is None: raise ValueError("operation on freed port") return hal.getAnalogTriggerInWindow(self.port)
[docs] def getTriggerState(self): """Return the TriggerState output of the analog trigger. True if above upper limit. False if below lower limit. If in Hysteresis, maintain previous state. :returns: The TriggerState output of the analog trigger. """ if self.port is None: raise ValueError("operation on freed port") return hal.getAnalogTriggerTriggerState(self.port)
[docs] def createOutput(self, type): """Creates an :class:`.AnalogTriggerOutput` object. Gets an output object that can be used for routing. Caller is responsible for deleting the AnalogTriggerOutput object. :param type: An enum of the type of output object to create. :returns: An AnalogTriggerOutput object. """ if self.port is None: raise ValueError("operation on freed port") return AnalogTriggerOutput(self, type)