blob: 0b39e6409d54d7201b4a1d8f67d43c8f6c3a6d3a [file] [log] [blame]
Austin Schuh812d0d12021-11-04 20:16:48 -07001// Copyright (c) FIRST and other WPILib contributors.
2// Open Source Software; you can modify and/or share it under the terms of
3// the WPILib BSD license file in the root directory of this project.
Brian Silverman8fce7482020-01-05 13:18:21 -08004
5#include "frc/AnalogAccelerometer.h"
6
7#include <hal/FRCUsageReporting.h>
Austin Schuh812d0d12021-11-04 20:16:48 -07008#include <wpi/NullDeleter.h>
9#include <wpi/sendable/SendableBuilder.h>
10#include <wpi/sendable/SendableRegistry.h>
Brian Silverman8fce7482020-01-05 13:18:21 -080011
Austin Schuh812d0d12021-11-04 20:16:48 -070012#include "frc/Errors.h"
Brian Silverman8fce7482020-01-05 13:18:21 -080013
14using namespace frc;
15
16AnalogAccelerometer::AnalogAccelerometer(int channel)
17 : AnalogAccelerometer(std::make_shared<AnalogInput>(channel)) {
Austin Schuh812d0d12021-11-04 20:16:48 -070018 wpi::SendableRegistry::AddChild(this, m_analogInput.get());
Brian Silverman8fce7482020-01-05 13:18:21 -080019}
20
21AnalogAccelerometer::AnalogAccelerometer(AnalogInput* channel)
Austin Schuh812d0d12021-11-04 20:16:48 -070022 : m_analogInput(channel, wpi::NullDeleter<AnalogInput>()) {
23 if (!channel) {
24 throw FRC_MakeError(err::NullParameter, "{}", "channel");
Brian Silverman8fce7482020-01-05 13:18:21 -080025 }
Austin Schuh812d0d12021-11-04 20:16:48 -070026 InitAccelerometer();
Brian Silverman8fce7482020-01-05 13:18:21 -080027}
28
29AnalogAccelerometer::AnalogAccelerometer(std::shared_ptr<AnalogInput> channel)
30 : m_analogInput(channel) {
Austin Schuh812d0d12021-11-04 20:16:48 -070031 if (!channel) {
32 throw FRC_MakeError(err::NullParameter, "{}", "channel");
Brian Silverman8fce7482020-01-05 13:18:21 -080033 }
Austin Schuh812d0d12021-11-04 20:16:48 -070034 InitAccelerometer();
Brian Silverman8fce7482020-01-05 13:18:21 -080035}
36
37double AnalogAccelerometer::GetAcceleration() const {
38 return (m_analogInput->GetAverageVoltage() - m_zeroGVoltage) / m_voltsPerG;
39}
40
41void AnalogAccelerometer::SetSensitivity(double sensitivity) {
42 m_voltsPerG = sensitivity;
43}
44
Austin Schuh812d0d12021-11-04 20:16:48 -070045void AnalogAccelerometer::SetZero(double zero) {
46 m_zeroGVoltage = zero;
47}
Brian Silverman8fce7482020-01-05 13:18:21 -080048
Austin Schuh812d0d12021-11-04 20:16:48 -070049void AnalogAccelerometer::InitSendable(wpi::SendableBuilder& builder) {
Brian Silverman8fce7482020-01-05 13:18:21 -080050 builder.SetSmartDashboardType("Accelerometer");
Austin Schuh1e69f942020-11-14 15:06:14 -080051 builder.AddDoubleProperty(
Austin Schuh812d0d12021-11-04 20:16:48 -070052 "Value", [=] { return GetAcceleration(); }, nullptr);
Brian Silverman8fce7482020-01-05 13:18:21 -080053}
54
55void AnalogAccelerometer::InitAccelerometer() {
56 HAL_Report(HALUsageReporting::kResourceType_Accelerometer,
57 m_analogInput->GetChannel() + 1);
58
Austin Schuh812d0d12021-11-04 20:16:48 -070059 wpi::SendableRegistry::AddLW(this, "Accelerometer",
60 m_analogInput->GetChannel());
Brian Silverman8fce7482020-01-05 13:18:21 -080061}