Home | History | Annotate | Download | only in adxl335
      1 /*
      2  * Author: Jon Trulson <jtrulson (at) ics.com>
      3  * Copyright (c) 2015 Intel Corporation.
      4  *
      5  * Adapted from the seeedstudio example
      6  * https://github.com/Seeed-Studio/Accelerometer_ADXL335
      7  *
      8  * Permission is hereby granted, free of charge, to any person obtaining
      9  * a copy of this software and associated documentation files (the
     10  * "Software"), to deal in the Software without restriction, including
     11  * without limitation the rights to use, copy, modify, merge, publish,
     12  * distribute, sublicense, and/or sell copies of the Software, and to
     13  * permit persons to whom the Software is furnished to do so, subject to
     14  * the following conditions:
     15  *
     16  * The above copyright notice and this permission notice shall be
     17  * included in all copies or substantial portions of the Software.
     18  *
     19  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
     20  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
     21  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
     22  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
     23  * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
     24  * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
     25  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
     26  */
     27 #pragma once
     28 
     29 #include <string>
     30 #include <mraa/aio.h>
     31 
     32 #define ADXL335_DEFAULT_AREF 5.0
     33 #define ADXL335_SENSITIVITY 0.25 // 0.25v/g
     34 
     35 namespace upm {
     36 
     37   /**
     38    * @brief ADXL335 Accelerometer library
     39    * @defgroup adxl335 libupm-adxl335
     40    * @ingroup seeed analog accelerometer
     41    */
     42 
     43   /**
     44    * @library adxl335
     45    * @sensor adxl335
     46    * @comname ADXL335 3-Axis Analog Accelerometer
     47    * @altname Grove 3-Axis Analog Accelerometer
     48    * @type accelerometer
     49    * @man seeed
     50    * @con analog
     51    *
     52    * @brief API for the ADXL335 3-Axis Analog Accelerometer
     53    *
     54    * UPM module for the ADXL335 3-axis analog accelerometer. This
     55    * was tested on a Grove 3-axis Analog Accelerometer. It uses 3
     56    * analog pins, one for each axis: X, Y, and Z.
     57    *
     58    * @image html adxl335.jpg
     59    * @snippet adxl335.cxx Interesting
     60    */
     61   class ADXL335 {
     62   public:
     63     /**
     64      * ADXL335 constructor
     65      *
     66      * @param pinX Analog pin to use for X-axis
     67      * @param pinY Analog pin to use for Y-axis
     68      * @param pinZ Analog pin to use for Z-axis
     69      * @param aref Analog reference voltage; default is 5.0v
     70      */
     71     ADXL335(int pinX, int pinY, int pinZ, float aref=ADXL335_DEFAULT_AREF);
     72 
     73     /**
     74      * ADXL335 destructor
     75      */
     76     ~ADXL335();
     77 
     78     /**
     79      * Sets the "zero" value of the X-axis, determined through calibration
     80      *
     81      * @param zeroX  "Zero" value of the X-axis
     82      */
     83     void setZeroX(float zeroX) { m_zeroX = zeroX; };
     84 
     85     /**
     86      * Sets the "zero" value of the Y-axis, determined through calibration
     87      *
     88      * @param zeroY  "Zero" value of the Y-axis
     89      */
     90     void setZeroY(float zeroY) { m_zeroY = zeroY; };
     91 
     92     /**
     93      * Sets the "zero" value of the Z-axis, determined through calibration
     94      *
     95      * @param zeroZ  "Zero" value of the Z-axis
     96      */
     97     void setZeroZ(float zeroZ) { m_zeroZ = zeroZ; };
     98 
     99     /**
    100      * Gets the analog values for the 3 axes
    101      *
    102      * @param xVal Pointer to the returned X-axis value
    103      * @param yVal Pointer to the returned Y-axis value
    104      * @param zVal Pointer to the returned Z-axis value
    105      */
    106     void values(int *xVal, int *yVal, int *zVal);
    107 
    108 #ifdef SWIGJAVA
    109     /**
    110      * Gets the analog values for the 3 axes
    111      *
    112      * @return Array containing value of X, Y, Z axes
    113      */
    114     int *values();
    115 #endif
    116 
    117     /**
    118      * Gets the acceleration along all 3 axes
    119      *
    120      * @param xAccel Pointer to returned X-axis value
    121      * @param yAccel Pointer to returned Y-axis value
    122      * @param zAccel Pointer to returned Z-axis value
    123      */
    124     void acceleration(float *xAccel, float *yAccel, float *zAccel);
    125 
    126 #ifdef SWIGJAVA
    127     /**
    128      * Gets the acceleration along all 3 axes
    129      *
    130      * @return Array containing acceleration on X, Y, Z axes
    131      */
    132     float *acceleration();
    133 #endif
    134 
    135     /**
    136      * While the sensor is still, measures the X-axis, Y-axis, and Z-axis
    137      * values and uses those values as the zero values.
    138      */
    139     void calibrate();
    140 
    141   private:
    142     mraa_aio_context m_aioX;
    143     mraa_aio_context m_aioY;
    144     mraa_aio_context m_aioZ;
    145     float m_aref;
    146     float m_zeroX, m_zeroY, m_zeroZ;
    147   };
    148 }
    149 
    150 
    151