blob: be0c7d2a9876b725ede707dd0a41257433fb1eca [file] [log] [blame]
Brian Silverman41cdd3e2019-01-19 19:48:58 -08001/*----------------------------------------------------------------------------*/
James Kuszmaul4f3ad3c2019-12-01 16:35:21 -08002/* Copyright (c) 2008-2019 FIRST. All Rights Reserved. */
Brian Silverman41cdd3e2019-01-19 19:48:58 -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
James Kuszmaul4b81d302019-12-14 20:53:14 -080010#include <hal/FRCUsageReporting.h>
Brian Silverman41cdd3e2019-01-19 19:48:58 -080011
12#include "frc/WPIErrors.h"
13#include "frc/smartdashboard/SendableBuilder.h"
James Kuszmaul4f3ad3c2019-12-01 16:35:21 -080014#include "frc/smartdashboard/SendableRegistry.h"
Brian Silverman41cdd3e2019-01-19 19:48:58 -080015
16using namespace frc;
17
18AnalogAccelerometer::AnalogAccelerometer(int channel)
19 : AnalogAccelerometer(std::make_shared<AnalogInput>(channel)) {
James Kuszmaul4f3ad3c2019-12-01 16:35:21 -080020 SendableRegistry::GetInstance().AddChild(this, m_analogInput.get());
Brian Silverman41cdd3e2019-01-19 19:48:58 -080021}
22
23AnalogAccelerometer::AnalogAccelerometer(AnalogInput* channel)
24 : m_analogInput(channel, NullDeleter<AnalogInput>()) {
25 if (channel == nullptr) {
26 wpi_setWPIError(NullParameter);
27 } else {
28 InitAccelerometer();
29 }
30}
31
32AnalogAccelerometer::AnalogAccelerometer(std::shared_ptr<AnalogInput> channel)
33 : m_analogInput(channel) {
34 if (channel == nullptr) {
35 wpi_setWPIError(NullParameter);
36 } else {
37 InitAccelerometer();
38 }
39}
40
41double AnalogAccelerometer::GetAcceleration() const {
42 return (m_analogInput->GetAverageVoltage() - m_zeroGVoltage) / m_voltsPerG;
43}
44
45void AnalogAccelerometer::SetSensitivity(double sensitivity) {
46 m_voltsPerG = sensitivity;
47}
48
49void AnalogAccelerometer::SetZero(double zero) { m_zeroGVoltage = zero; }
50
51double AnalogAccelerometer::PIDGet() { return GetAcceleration(); }
52
53void AnalogAccelerometer::InitSendable(SendableBuilder& builder) {
54 builder.SetSmartDashboardType("Accelerometer");
55 builder.AddDoubleProperty("Value", [=]() { return GetAcceleration(); },
56 nullptr);
57}
58
59void AnalogAccelerometer::InitAccelerometer() {
60 HAL_Report(HALUsageReporting::kResourceType_Accelerometer,
James Kuszmaul4b81d302019-12-14 20:53:14 -080061 m_analogInput->GetChannel() + 1);
James Kuszmaul4f3ad3c2019-12-01 16:35:21 -080062
63 SendableRegistry::GetInstance().AddLW(this, "Accelerometer",
64 m_analogInput->GetChannel());
Brian Silverman41cdd3e2019-01-19 19:48:58 -080065}