Austin Schuh | 812d0d1 | 2021-11-04 20:16:48 -0700 | [diff] [blame^] | 1 | // 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 Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 4 | |
| 5 | #include "frc/AnalogAccelerometer.h" |
| 6 | |
| 7 | #include <hal/FRCUsageReporting.h> |
Austin Schuh | 812d0d1 | 2021-11-04 20:16:48 -0700 | [diff] [blame^] | 8 | #include <wpi/NullDeleter.h> |
| 9 | #include <wpi/sendable/SendableBuilder.h> |
| 10 | #include <wpi/sendable/SendableRegistry.h> |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 11 | |
Austin Schuh | 812d0d1 | 2021-11-04 20:16:48 -0700 | [diff] [blame^] | 12 | #include "frc/Errors.h" |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 13 | |
| 14 | using namespace frc; |
| 15 | |
| 16 | AnalogAccelerometer::AnalogAccelerometer(int channel) |
| 17 | : AnalogAccelerometer(std::make_shared<AnalogInput>(channel)) { |
Austin Schuh | 812d0d1 | 2021-11-04 20:16:48 -0700 | [diff] [blame^] | 18 | wpi::SendableRegistry::AddChild(this, m_analogInput.get()); |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 19 | } |
| 20 | |
| 21 | AnalogAccelerometer::AnalogAccelerometer(AnalogInput* channel) |
Austin Schuh | 812d0d1 | 2021-11-04 20:16:48 -0700 | [diff] [blame^] | 22 | : m_analogInput(channel, wpi::NullDeleter<AnalogInput>()) { |
| 23 | if (!channel) { |
| 24 | throw FRC_MakeError(err::NullParameter, "{}", "channel"); |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 25 | } |
Austin Schuh | 812d0d1 | 2021-11-04 20:16:48 -0700 | [diff] [blame^] | 26 | InitAccelerometer(); |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 27 | } |
| 28 | |
| 29 | AnalogAccelerometer::AnalogAccelerometer(std::shared_ptr<AnalogInput> channel) |
| 30 | : m_analogInput(channel) { |
Austin Schuh | 812d0d1 | 2021-11-04 20:16:48 -0700 | [diff] [blame^] | 31 | if (!channel) { |
| 32 | throw FRC_MakeError(err::NullParameter, "{}", "channel"); |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 33 | } |
Austin Schuh | 812d0d1 | 2021-11-04 20:16:48 -0700 | [diff] [blame^] | 34 | InitAccelerometer(); |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 35 | } |
| 36 | |
| 37 | double AnalogAccelerometer::GetAcceleration() const { |
| 38 | return (m_analogInput->GetAverageVoltage() - m_zeroGVoltage) / m_voltsPerG; |
| 39 | } |
| 40 | |
| 41 | void AnalogAccelerometer::SetSensitivity(double sensitivity) { |
| 42 | m_voltsPerG = sensitivity; |
| 43 | } |
| 44 | |
Austin Schuh | 812d0d1 | 2021-11-04 20:16:48 -0700 | [diff] [blame^] | 45 | void AnalogAccelerometer::SetZero(double zero) { |
| 46 | m_zeroGVoltage = zero; |
| 47 | } |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 48 | |
Austin Schuh | 812d0d1 | 2021-11-04 20:16:48 -0700 | [diff] [blame^] | 49 | void AnalogAccelerometer::InitSendable(wpi::SendableBuilder& builder) { |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 50 | builder.SetSmartDashboardType("Accelerometer"); |
Austin Schuh | 1e69f94 | 2020-11-14 15:06:14 -0800 | [diff] [blame] | 51 | builder.AddDoubleProperty( |
Austin Schuh | 812d0d1 | 2021-11-04 20:16:48 -0700 | [diff] [blame^] | 52 | "Value", [=] { return GetAcceleration(); }, nullptr); |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 53 | } |
| 54 | |
| 55 | void AnalogAccelerometer::InitAccelerometer() { |
| 56 | HAL_Report(HALUsageReporting::kResourceType_Accelerometer, |
| 57 | m_analogInput->GetChannel() + 1); |
| 58 | |
Austin Schuh | 812d0d1 | 2021-11-04 20:16:48 -0700 | [diff] [blame^] | 59 | wpi::SendableRegistry::AddLW(this, "Accelerometer", |
| 60 | m_analogInput->GetChannel()); |
Brian Silverman | 8fce748 | 2020-01-05 13:18:21 -0800 | [diff] [blame] | 61 | } |