mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-20 00:51:42 +00:00
80 lines
2.4 KiB
C++
80 lines
2.4 KiB
C++
/*----------------------------------------------------------------------------*/
|
|
/* Copyright (c) 2014-2017 FIRST. 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. */
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
#include "BuiltInAccelerometer.h"
|
|
|
|
#include <HAL/Accelerometer.h>
|
|
#include <HAL/HAL.h>
|
|
|
|
#include "LiveWindow/LiveWindow.h"
|
|
#include "WPIErrors.h"
|
|
|
|
using namespace frc;
|
|
|
|
/**
|
|
* Constructor.
|
|
*
|
|
* @param range The range the accelerometer will measure
|
|
*/
|
|
BuiltInAccelerometer::BuiltInAccelerometer(Range range) {
|
|
SetRange(range);
|
|
|
|
HAL_Report(HALUsageReporting::kResourceType_Accelerometer, 0, 0,
|
|
"Built-in accelerometer");
|
|
LiveWindow::GetInstance()->AddSensor((std::string) "BuiltInAccel", 0, this);
|
|
}
|
|
|
|
void BuiltInAccelerometer::SetRange(Range range) {
|
|
if (range == kRange_16G) {
|
|
wpi_setWPIErrorWithContext(
|
|
ParameterOutOfRange, "16G range not supported (use k2G, k4G, or k8G)");
|
|
}
|
|
|
|
HAL_SetAccelerometerActive(false);
|
|
HAL_SetAccelerometerRange((HAL_AccelerometerRange)range);
|
|
HAL_SetAccelerometerActive(true);
|
|
}
|
|
|
|
/**
|
|
* @return The acceleration of the roboRIO along the X axis in g-forces
|
|
*/
|
|
double BuiltInAccelerometer::GetX() { return HAL_GetAccelerometerX(); }
|
|
|
|
/**
|
|
* @return The acceleration of the roboRIO along the Y axis in g-forces
|
|
*/
|
|
double BuiltInAccelerometer::GetY() { return HAL_GetAccelerometerY(); }
|
|
|
|
/**
|
|
* @return The acceleration of the roboRIO along the Z axis in g-forces
|
|
*/
|
|
double BuiltInAccelerometer::GetZ() { return HAL_GetAccelerometerZ(); }
|
|
|
|
std::string BuiltInAccelerometer::GetSmartDashboardType() const {
|
|
return "3AxisAccelerometer";
|
|
}
|
|
|
|
void BuiltInAccelerometer::InitTable(
|
|
std::shared_ptr<nt::NetworkTable> subtable) {
|
|
if (subtable != nullptr) {
|
|
m_xEntry = subtable->GetEntry("X");
|
|
m_yEntry = subtable->GetEntry("Y");
|
|
m_zEntry = subtable->GetEntry("Z");
|
|
UpdateTable();
|
|
} else {
|
|
m_xEntry = nt::NetworkTableEntry();
|
|
m_yEntry = nt::NetworkTableEntry();
|
|
m_zEntry = nt::NetworkTableEntry();
|
|
}
|
|
}
|
|
|
|
void BuiltInAccelerometer::UpdateTable() {
|
|
if (m_xEntry) m_xEntry.SetDouble(GetX());
|
|
if (m_yEntry) m_yEntry.SetDouble(GetY());
|
|
if (m_zEntry) m_zEntry.SetDouble(GetZ());
|
|
}
|