blob: 09bc2f510880017752560b2d1606a3d6cd724d38 [file] [log] [blame]
Brian Silverman8fce7482020-01-05 13:18:21 -08001/*----------------------------------------------------------------------------*/
Austin Schuh1e69f942020-11-14 15:06:14 -08002/* Copyright (c) 2008-2020 FIRST. All Rights Reserved. */
Brian Silverman8fce7482020-01-05 13:18:21 -08003/* Open Source Software - may be modified and shared by FRC teams. The code */
4/* must be accompanied by the FIRST BSD license file in the root directory of */
5/* the project. */
6/*----------------------------------------------------------------------------*/
7
8#include "frc/AnalogAccelerometer.h"
9
10#include <hal/FRCUsageReporting.h>
11
Austin Schuh1e69f942020-11-14 15:06:14 -080012#include "frc/Base.h"
Brian Silverman8fce7482020-01-05 13:18:21 -080013#include "frc/WPIErrors.h"
14#include "frc/smartdashboard/SendableBuilder.h"
15#include "frc/smartdashboard/SendableRegistry.h"
16
17using namespace frc;
18
19AnalogAccelerometer::AnalogAccelerometer(int channel)
20 : AnalogAccelerometer(std::make_shared<AnalogInput>(channel)) {
21 SendableRegistry::GetInstance().AddChild(this, m_analogInput.get());
22}
23
24AnalogAccelerometer::AnalogAccelerometer(AnalogInput* channel)
25 : m_analogInput(channel, NullDeleter<AnalogInput>()) {
26 if (channel == nullptr) {
27 wpi_setWPIError(NullParameter);
28 } else {
29 InitAccelerometer();
30 }
31}
32
33AnalogAccelerometer::AnalogAccelerometer(std::shared_ptr<AnalogInput> channel)
34 : m_analogInput(channel) {
35 if (channel == nullptr) {
36 wpi_setWPIError(NullParameter);
37 } else {
38 InitAccelerometer();
39 }
40}
41
42double AnalogAccelerometer::GetAcceleration() const {
43 return (m_analogInput->GetAverageVoltage() - m_zeroGVoltage) / m_voltsPerG;
44}
45
46void AnalogAccelerometer::SetSensitivity(double sensitivity) {
47 m_voltsPerG = sensitivity;
48}
49
50void AnalogAccelerometer::SetZero(double zero) { m_zeroGVoltage = zero; }
51
52double AnalogAccelerometer::PIDGet() { return GetAcceleration(); }
53
54void AnalogAccelerometer::InitSendable(SendableBuilder& builder) {
55 builder.SetSmartDashboardType("Accelerometer");
Austin Schuh1e69f942020-11-14 15:06:14 -080056 builder.AddDoubleProperty(
57 "Value", [=]() { return GetAcceleration(); }, nullptr);
Brian Silverman8fce7482020-01-05 13:18:21 -080058}
59
60void AnalogAccelerometer::InitAccelerometer() {
61 HAL_Report(HALUsageReporting::kResourceType_Accelerometer,
62 m_analogInput->GetChannel() + 1);
63
64 SendableRegistry::GetInstance().AddLW(this, "Accelerometer",
65 m_analogInput->GetChannel());
66}