blob: 3ae8e482bb6ae12c066781021b07767702adfdd6 [file] [log] [blame]
Brian Silverman41cdd3e2019-01-19 19:48:58 -08001/*----------------------------------------------------------------------------*/
2/* Copyright (c) 2008-2018 FIRST. All Rights Reserved. */
3/* 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/HAL.h>
11
12#include "frc/WPIErrors.h"
13#include "frc/smartdashboard/SendableBuilder.h"
14
15using namespace frc;
16
17AnalogAccelerometer::AnalogAccelerometer(int channel)
18 : AnalogAccelerometer(std::make_shared<AnalogInput>(channel)) {
19 AddChild(m_analogInput);
20}
21
22AnalogAccelerometer::AnalogAccelerometer(AnalogInput* channel)
23 : m_analogInput(channel, NullDeleter<AnalogInput>()) {
24 if (channel == nullptr) {
25 wpi_setWPIError(NullParameter);
26 } else {
27 InitAccelerometer();
28 }
29}
30
31AnalogAccelerometer::AnalogAccelerometer(std::shared_ptr<AnalogInput> channel)
32 : m_analogInput(channel) {
33 if (channel == nullptr) {
34 wpi_setWPIError(NullParameter);
35 } else {
36 InitAccelerometer();
37 }
38}
39
40double AnalogAccelerometer::GetAcceleration() const {
41 return (m_analogInput->GetAverageVoltage() - m_zeroGVoltage) / m_voltsPerG;
42}
43
44void AnalogAccelerometer::SetSensitivity(double sensitivity) {
45 m_voltsPerG = sensitivity;
46}
47
48void AnalogAccelerometer::SetZero(double zero) { m_zeroGVoltage = zero; }
49
50double AnalogAccelerometer::PIDGet() { return GetAcceleration(); }
51
52void AnalogAccelerometer::InitSendable(SendableBuilder& builder) {
53 builder.SetSmartDashboardType("Accelerometer");
54 builder.AddDoubleProperty("Value", [=]() { return GetAcceleration(); },
55 nullptr);
56}
57
58void AnalogAccelerometer::InitAccelerometer() {
59 HAL_Report(HALUsageReporting::kResourceType_Accelerometer,
60 m_analogInput->GetChannel());
61 SetName("Accelerometer", m_analogInput->GetChannel());
62}