From 9f1a9a07c9402b7edf1a9fb3189e9307800d8680 Mon Sep 17 00:00:00 2001 From: thomasclark Date: Mon, 21 Jul 2014 08:57:03 -0400 Subject: [PATCH] Added a C++ built-in accelerometer class Change-Id: I80cee788912277f06ac4bdda40261f160de0cbaa --- .../wpilibC++/include/BuiltInAccelerometer.h | 30 +++++++++++ .../wpilibC++/lib/BuiltInAccelerometer.cpp | 53 +++++++++++++++++++ .../src/AccelerometerTest.cpp | 23 ++++++++ 3 files changed, 106 insertions(+) create mode 100644 wpilibc/wpilibC++/include/BuiltInAccelerometer.h create mode 100644 wpilibc/wpilibC++/lib/BuiltInAccelerometer.cpp create mode 100644 wpilibc/wpilibC++IntegrationTests/src/AccelerometerTest.cpp diff --git a/wpilibc/wpilibC++/include/BuiltInAccelerometer.h b/wpilibc/wpilibC++/include/BuiltInAccelerometer.h new file mode 100644 index 0000000000..afcd86c53d --- /dev/null +++ b/wpilibc/wpilibC++/include/BuiltInAccelerometer.h @@ -0,0 +1,30 @@ +/*----------------------------------------------------------------------------*/ +/* Copyright (c) FIRST 2014. All Rights Reserved. */ +/* Open Source Software - may be modified and shared by FRC teams. The code */ +/* must be accompanied by the FIRST BSD license file in $(WIND_BASE)/WPILib. */ +/*----------------------------------------------------------------------------*/ +#pragma once + +#include "SensorBase.h" + +/** + * Built-in accelerometer. + * + * This class allows access to the RoboRIO's internal accelerometer. + */ +class BuiltInAccelerometer : public SensorBase +{ +public: + enum Range + { + kRange_2G = 0x00, + kRange_4G = 0x01, + kRange_8G = 0x02, + }; + + BuiltInAccelerometer(Range range = kRange_2G); + virtual ~BuiltInAccelerometer(); + virtual double GetX() const; + virtual double GetY() const; + virtual double GetZ() const; +}; diff --git a/wpilibc/wpilibC++/lib/BuiltInAccelerometer.cpp b/wpilibc/wpilibC++/lib/BuiltInAccelerometer.cpp new file mode 100644 index 0000000000..98690ef794 --- /dev/null +++ b/wpilibc/wpilibC++/lib/BuiltInAccelerometer.cpp @@ -0,0 +1,53 @@ +/*----------------------------------------------------------------------------*/ +/* Copyright (c) FIRST 2014. All Rights Reserved. */ +/* Open Source Software - may be modified and shared by FRC teams. The code */ +/* must be accompanied by the FIRST BSD license file in $(WIND_BASE)/WPILib. */ +/*----------------------------------------------------------------------------*/ + +#include "BuiltInAccelerometer.h" +#include "HAL/HAL.hpp" + +/** + * Constructor. + * @param range The range the accelerometer will measure + */ +BuiltInAccelerometer::BuiltInAccelerometer(Range range) +{ + setAccelerometerActive(false); + setAccelerometerRange((AccelerometerRange)range); + setAccelerometerActive(true); + + HALReport(HALUsageReporting::kResourceType_Accelerometer, 0, 0, "Built-in accelerometer"); +} + +/** + * Destructor. + */ +BuiltInAccelerometer::~BuiltInAccelerometer() +{ + setAccelerometerActive(false); +} + +/** + * @return The acceleration of the RoboRIO along the X axis in g-forces + */ +double BuiltInAccelerometer::GetX() const +{ + return getAccelerometerX(); +} + +/** + * @return The acceleration of the RoboRIO along the Y axis in g-forces + */ +double BuiltInAccelerometer::GetY() const +{ + return getAccelerometerY(); +} + +/** + * @return The acceleration of the RoboRIO along the Z axis in g-forces + */ +double BuiltInAccelerometer::GetZ() const +{ + return getAccelerometerZ(); +} diff --git a/wpilibc/wpilibC++IntegrationTests/src/AccelerometerTest.cpp b/wpilibc/wpilibC++IntegrationTests/src/AccelerometerTest.cpp new file mode 100644 index 0000000000..1d9bd29ceb --- /dev/null +++ b/wpilibc/wpilibC++IntegrationTests/src/AccelerometerTest.cpp @@ -0,0 +1,23 @@ +/*----------------------------------------------------------------------------*/ +/* Copyright (c) FIRST 2014. All Rights Reserved. */ +/* Open Source Software - may be modified and shared by FRC teams. The code */ +/* must be accompanied by the FIRST BSD license file in the root directory of */ +/* the project. */ +/*----------------------------------------------------------------------------*/ + +#include "WPILib.h" +#include "gtest/gtest.h" + +static constexpr double accelerationTolerance = 0.1; + +/** + * There's not much we can automatically test with the on-board accelerometer, + * but checking for gravity is probably good enough to tell that it's working. + */ +TEST(AccelerometerTest, Accelerometer) { + BuiltInAccelerometer accelerometer; + + ASSERT_NEAR(0.0, accelerometer.GetX(), accelerationTolerance); + ASSERT_NEAR(0.0, accelerometer.GetY(), accelerationTolerance); + ASSERT_NEAR(1.0, accelerometer.GetZ(), accelerationTolerance); +}