upm  1.7.1
Sensor/Actuator repository for libmraa (v2.0.0)
Data Structures | Functions | Typedefs
Include dependency graph for mma7361.h:

API Description

/*
* Author: Jon Trulson <jtrulson@ics.com>
* Copyright (c) 2016 Intel Corporation.
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include <unistd.h>
#include <signal.h>
#include "mma7361.h"
#include "upm_utilities.h"
bool shouldRun = true;
void sig_handler(int signo)
{
if (signo == SIGINT)
shouldRun = false;
}
int main()
{
signal(SIGINT, sig_handler);
// Instantiate a MMA7361 sensor on analog pins A0 (X), A1 (Y) A2
// (Z), selftest pin on D2, sleep pin on D3 nd an analog reference
// value of 5.0. The freefall pin and the range pin are unused
// (-1).
mma7361_context sensor = mma7361_init(0, 1, 2, 2, 3, -1, -1, 5.0);
if (!sensor)
{
printf("mma7361_init() failed.\n");
return(1);
}
// 1.5g (true = 6g)
mma7361_set_range(sensor, false);
// Every 10th of a second, update and print values
while (shouldRun)
{
mma7361_update(sensor);
float x, y, z;
mma7361_get_acceleration(sensor, &x, &y, &z);
printf("Acceleration x = %f y = %f z = %f\n",
x, y, z);
mma7361_get_volts(sensor, &x, &y, &z);
printf("Volts x = %f y = %f z = %f\n\n",
x, y, z);
upm_delay_ms(500);
}
printf("Exiting...\n");
mma7361_close(sensor);
return 0;
}

Go to the source code of this file.

Data Structures

struct  _mma7361_context
 

Functions

mma7361_context mma7361_init (int x_pin, int y_pin, int z_pin, int selftest_pin, int sleep_pin, int freefall_pin, int range_pin, float a_ref)
 
void mma7361_close (mma7361_context dev)
 
void mma7361_set_range (const mma7361_context dev, bool range)
 
upm_result_t mma7361_sleep (const mma7361_context dev, bool sleep)
 
upm_result_t mma7361_freefall (const mma7361_context dev, bool *freefall)
 
upm_result_t mma7361_selftest (const mma7361_context dev, bool selftest)
 
upm_result_t mma7361_update (const mma7361_context dev)
 
void mma7361_set_offset (const mma7361_context dev, float x, float y, float z)
 
void mma7361_set_scale (const mma7361_context dev, float x, float y, float z)
 
void mma7361_get_acceleration (const mma7361_context dev, float *x, float *y, float *z)
 
void mma7361_get_volts (const mma7361_context dev, float *x, float *y, float *z)
 
void mma7361_get_normalized (const mma7361_context dev, float *x, float *y, float *z)
 

Typedefs

typedef struct _mma7361_contextmma7361_context
 

Function Documentation

mma7361_context mma7361_init ( int  x_pin,
int  y_pin,
int  z_pin,
int  selftest_pin,
int  sleep_pin,
int  freefall_pin,
int  range_pin,
float  a_ref 
)

MMA7361 Initializer

This sensor isn't designed for navigational purposes - rather it's intended for less precise measurements such as determining tilt and orientation.

All of these pins are optional, and will depend on how your device is connected. For those pins you do not need, supply -1 as the pin. You must supply a valid pin for at least one of the axes, or what's the point?

The DFRobot variant of this sensor uses a mechanical switch on the board to determine the G-range to use, so on this board you would supply -1 for the range_pin, but be sure to call mma7361_set_range() with the correct parameter so that the internal logic will generate correct results.

Parameters
x_pinAnalog pin to use for X axis. -1 to disable.
y_pinAnalog pin to use for Y axis. -1 to disable.
z_pinAnalog pin to use for Z axis. -1 to disable.
selftest_pinGPIO pin to use for self test. -1 to disable.
sleep_pinGPIO pin to use for sleep function. -1 to disable.
freefall_pinGPIO pin to use for free fall (0g) detection. -1 to disable.
range_pinGPIO pin to select range (1.5g or 6g). -1 to disable.
a_refThe analog reference voltage in use

Here is the call graph for this function:

void mma7361_close ( mma7361_context  dev)

MMA7361 sensor close function

Here is the caller graph for this function:

void mma7361_set_range ( const mma7361_context  dev,
bool  range 
)

Set the range of the device. This device supports two G ranges: 1.5 and 6. The default is 1.5G.

Parameters
devsensor context
rangetrue for 6G, false for 1.5G

Here is the caller graph for this function:

upm_result_t mma7361_sleep ( const mma7361_context  dev,
bool  sleep 
)

Set sleep mode. When in sleep mode the sensor uses minimal power.

Parameters
devsensor context
sleeptrue to go into sleep mode, false to wake up
Returns
UPM result

Here is the caller graph for this function:

upm_result_t mma7361_freefall ( const mma7361_context  dev,
bool *  freefall 
)

Get freefall detection status.

Parameters
devsensor context
freefallO pointer to a boolean value indicating whether a freefall condition is being detected.
Returns
UPM result

Here is the caller graph for this function:

upm_result_t mma7361_selftest ( const mma7361_context  dev,
bool  selftest 
)

Enable self test mode.

Parameters
devsensor context
selftesttrue to enable the self test mode, false otherwise.
Returns
UPM result

Here is the caller graph for this function:

upm_result_t mma7361_update ( const mma7361_context  dev)

Read the sensor status an update internal state. mma7361_update() must have been called before calling mma7361_get_acceleration(), mma7361_get_normalized(), or mma7361_get_volts().

Parameters
devsensor context
Returns
UPM result

Here is the caller graph for this function:

void mma7361_set_offset ( const mma7361_context  dev,
float  x,
float  y,
float  z 
)

Set sensor offset. This offset is applied to the return values before scaling. Default is 0.0.

Parameters
devsensor context pointer
xScale to apply to X value
yScale to apply to Y value
zScale to apply to Z value

Here is the caller graph for this function:

void mma7361_set_scale ( const mma7361_context  dev,
float  x,
float  y,
float  z 
)

Set sensor scale. The acceleration return values are scaled by this value before the offset is applied. Default is 1.0.

Parameters
devsensor context pointer
xOffset to apply to X value
yOffset to apply to Y value
zOffset to apply to Z value

Here is the caller graph for this function:

void mma7361_get_acceleration ( const mma7361_context  dev,
float *  x,
float *  y,
float *  z 
)

Get computed acceleration from the sensor. mma7361_update() must have been called prior to calling this function.

Parameters
devsensor context pointer
xa pointer in which X acceleration data will be returned
ya pointer in which Y acceleration data will be returned
za pointer in which Z acceleration data will be returned

Here is the caller graph for this function:

void mma7361_get_volts ( const mma7361_context  dev,
float *  x,
float *  y,
float *  z 
)

Get the measured volts from the sensor. mma7361_update() must have been called prior to calling this function.

Parameters
devsensor context pointer
xa pointer in which X volt data will be returned
ya pointer in which Y volt data will be returned
za pointer in which Z volt data will be returned

Here is the caller graph for this function:

void mma7361_get_normalized ( const mma7361_context  dev,
float *  x,
float *  y,
float *  z 
)

Get the normalized ADC values from the sensor. mma7361_update() must have been called prior to calling this function.

Parameters
devsensor context pointer
xa pointer in which X normalized ADC data will be returned
ya pointer in which Y normalized ADC data will be returned
za pointer in which Z normalized ADC data will be returned

Here is the caller graph for this function:

Typedef Documentation

Device context