# validated: 2017-12-27 TW f9bece2ffbf7 edu/wpi/first/wpilibj/BuiltInAccelerometer.java
#----------------------------------------------------------------------------
# Copyright (c) FIRST 2014-2016. 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 $(WIND_BASE)/WPILib.
#----------------------------------------------------------------------------
import hal
from .interfaces import Accelerometer
from .sensorbase import SensorBase
__all__ = ["BuiltInAccelerometer"]
[docs]class BuiltInAccelerometer(SensorBase):
"""Built-in accelerometer device
This class allows access to the roboRIO's internal accelerometer.
"""
Range = Accelerometer.Range
def __init__(self, range=Accelerometer.Range.k8G):
"""Constructor.
:param range: The range the accelerometer will measure. Defaults to
+/-8g if unspecified.
:type range: :class:`.Accelerometer.Range`
"""
super().__init__()
self.setRange(range)
self.xEntry = None
self.yEntry = None
self.zEntry = None
hal.report(hal.UsageReporting.kResourceType_Accelerometer, 0, 0,
"Built-in accelerometer")
self.setName("BuiltInAccel", 0)
[docs] def setRange(self, range):
"""Set the measuring range of the accelerometer.
:param range: The maximum acceleration, positive or negative, that
the accelerometer will measure.
:type range: :class:`BuiltInAccelerometer.Range`
"""
hal.setAccelerometerActive(False)
if range == self.Range.k2G:
hal.setAccelerometerRange(hal.AccelerometerRange.kRange_2G)
elif range == self.Range.k4G:
hal.setAccelerometerRange(hal.AccelerometerRange.kRange_4G)
elif range == self.Range.k8G:
hal.setAccelerometerRange(hal.AccelerometerRange.kRange_8G)
elif range == self.Range.k16G:
raise ValueError("16G range not supported (use k2G, k4G, or k8G)")
else:
raise ValueError("Invalid range argument '%s'" % range)
hal.setAccelerometerActive(True)
[docs] def getX(self):
"""
:returns: The acceleration of the roboRIO along the X axis in
g-forces
:rtype: float
"""
return hal.getAccelerometerX()
[docs] def getY(self):
"""
:returns: The acceleration of the roboRIO along the Y axis in
g-forces
:rtype: float
"""
return hal.getAccelerometerY()
[docs] def getZ(self):
"""
:returns: The acceleration of the roboRIO along the Z axis in
g-forces
:rtype: float
"""
return hal.getAccelerometerZ()
[docs] def initSendable(self, builder):
builder.setSmartDashboardType("3AxisAccelerometer")
builder.addDoubleProperty("X", self.getX, None)
builder.addDoubleProperty("Y", self.getY, None)
builder.addDoubleProperty("Z", self.getZ, None)