Accelerometer¶
All MbientLab boards come with an accelerometer, a device which measure acceleration forces e.g. gravity and motion, accessed through the Accelerometer interface.
Beecause there are different accelerometers used across the boards, the base Accelerometer
interface was designed to be used with any accelerometer
thus it can only access the measured acceleration data. Developers building apps for specific MetaWear models should also review the
Bosch Accelerometer or MMA8452Q Accelerometer sections`.
import com.mbietnlab.metawear.Accelerometer;
Accelerometer accelerometer= board.getModule(Accelerometer.class);
Global Enable¶
To retrieve data from the accelerometers, developers will also need to set a global enable bit with the Accelerometer
level
start function. The global start
method must be called last, after all the sensor configuration has been set and async producers enabled. Conversly to return the accelerometer to
standby mode, call stop.
// enable the sensor
// call last after configuring and enabling other data producers
accelerometer.start();
// disable the sensor
accelerometer.stop();
Configuration¶
It is important that you first set the output data rate and data range before using the accelerometer as these setings are typically global settings that affect the configuration of other acceleromter features. To configure the accelerometer, call config and use the returned editor object to set the output data rate and range. As this is a generic editor interface, only float values are accepted and the actual settings used may not be the same as the values passed in.
accelerometer.configure()
.odr(25f) // Set sampling frequency to 25Hz, or closest valid ODR
.range(4f) // Set data range to +/-4g, or closet valid range
.commit();
Log.i("MainActivity", "Actual Odr = " + accelerometer.getOdr());
Log.i("MainActivity", "Actual Range = " + accelerometer.getRange());
Acceleration Data¶
The accelerometers provide access to the raw acceleration data they measure. Use the
acceleration method to get the
AsyncDataProducer
object controlling the acceleration data. Then, setup a data route to handle the dadta, and finally, start the accelerometer.
Raw acceleration data is represented by the API as a Acceleration type.
accelerometer.acceleration().addRouteAsync(new RouteBuilder() {
@Override
public void configure(RouteElement source) {
source.stream(new Subscriber() {
@Override
public void apply(Data data, Object... env) {
Log.i("MainActivity", data.value(Acceleration.class).toString());
}
});
}
}).continueWith(new Continuation<Route, Void>() {
@Override
public Void then(Task<Route> task) throws Exception {
accelerometer.acceleration().start();
accelerometer.start();
return null;
}
});