/*----------------------------------------------------------------------------*/ /* Copyright (c) 2008-2018 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 "frc/AnalogAccelerometer.h" #include #include "frc/WPIErrors.h" #include "frc/smartdashboard/SendableBuilder.h" using namespace frc; AnalogAccelerometer::AnalogAccelerometer(int channel) : AnalogAccelerometer(std::make_shared(channel)) { AddChild(m_analogInput); } AnalogAccelerometer::AnalogAccelerometer(AnalogInput* channel) : m_analogInput(channel, NullDeleter()) { if (channel == nullptr) { wpi_setWPIError(NullParameter); } else { InitAccelerometer(); } } AnalogAccelerometer::AnalogAccelerometer(std::shared_ptr channel) : m_analogInput(channel) { if (channel == nullptr) { wpi_setWPIError(NullParameter); } else { InitAccelerometer(); } } double AnalogAccelerometer::GetAcceleration() const { return (m_analogInput->GetAverageVoltage() - m_zeroGVoltage) / m_voltsPerG; } void AnalogAccelerometer::SetSensitivity(double sensitivity) { m_voltsPerG = sensitivity; } void AnalogAccelerometer::SetZero(double zero) { m_zeroGVoltage = zero; } double AnalogAccelerometer::PIDGet() { return GetAcceleration(); } void AnalogAccelerometer::InitSendable(SendableBuilder& builder) { builder.SetSmartDashboardType("Accelerometer"); builder.AddDoubleProperty("Value", [=]() { return GetAcceleration(); }, nullptr); } void AnalogAccelerometer::InitAccelerometer() { HAL_Report(HALUsageReporting::kResourceType_Accelerometer, m_analogInput->GetChannel()); SetName("Accelerometer", m_analogInput->GetChannel()); }