Skip to content

Navigation Menu

Sign in
Sign up

Repository files navigation

LSM6DS

build Framework Badge mbed

Mbed library for LSM6DS3 & LSM6DSO32 accel & gyro. Supports only I2C

Accelerometer examples

Basic read
#include "mbed.h"
#include "LSM6DS3.h"
#define I2C_SDA PB_9
#define I2C_SCL PB_8
LSM6DS3 accel(I2C_SDA, I2C_SCL);
int main() {
 if (!accel.init()) {
 debug("Could not init\n");
 return 0;
 }
 if (!accel.setupAccel(LSM6DS3::AccelODR_26Hz, LSM6DS3::AccelScale_4G)) {
 debug("Couldn't setup setup slow ODR accel\n");
 return 0;
 }
 while (1) {
 float x, y, z;
 if (!accel.getAccel(&x, &y, &z)) {
 debug("Error reading\n");
 return 0;
 }
 debug("%.6f,%.6f,%.6f\n", x, y, z);
 ThisThread::sleep_for(100ms);
 }
}
Significant motion
#include "mbed.h"
#include "LSM6DS3.h"
#define I2C_SDA PB_9
#define I2C_SCL PB_8
EventQueue eQueue(2 * EVENTS_EVENT_SIZE);
LSM6DS3 accel(I2C_SDA, I2C_SCL);
InterruptIn accelInt(PA_9, PullDown);
void accelIntCb() {
 char data[1];
 if (accel.getFnIntReason(data)) {
 if (data[0] & LSM6DS3_FN_SRC_SIGN_MOTION_IA) {
 debug("Significant motion\n");
 }
 }
}
int main() {
 if (!accel.init()) {
 debug("Could not init\n");
 return 0;
 }
 if (!accel.setupAccel(LSM6DS3::AccelODR_26Hz, LSM6DS3::AccelScale_4G)) {
 debug("Couldn't setup setup slow ODR accel\n");
 return 0;
 }
 if (!accel.significantMotion(true, 1)) { // enable, threshold
 debug("Could set setup significant motion\n");
 return 0;
 }
 if (!accel.setINT1(0b01000000)) {
 debug("Could set setup INT\n");
 return 0;
 }
 accelInt.rise(eQueue.event(accelIntCb));
 while (1) {
 eQueue.dispatch_forever();
 }
}
Wakeup
#include "mbed.h"
#include "LSM6DS3.h"
#define I2C_SDA PB_9
#define I2C_SCL PB_8
EventQueue eQueue(2 * EVENTS_EVENT_SIZE);
LSM6DS3 accel(I2C_SDA, I2C_SCL);
InterruptIn accelInt(PA_9, PullDown);
void accelIntCb() {
 char data[1];
 if (accel.getWakeupReason(data)) {
 if (data[0] & LSM6DS_WAKEUP_SRC_WU_IA) {
 debug("Wake up event\n");
 }
 }
}
int main() {
 if (!accel.init()) {
 debug("Could not init\n");
 return 0;
 }
 if (!accel.setupAccel(LSM6DS3::AccelODR_52Hz, LSM6DS3::AccelScale_4G)) {
 debug("Couldn't setup setup slow ODR accel\n");
 return 0;
 }
 if (!accel.setAccelFilter(LSM6DS3::AccelSlopeFilter)) {
 debug("Couldn't setup filter\n");
 return 0;
 }
 if (!accel.setWakeup(2, 2, 0)) { // threshold, wakeup time, sleep time
 debug("Couldn't setup wakeup\n");
 return 0;
 }
 if (!accel.setFnINT1(0b00100000)) {
 debug("Couldn't setup setup INT\n");
 return 0;
 }
 accelInt.rise(eQueue.event(accelIntCb));
 while (1) {
 eQueue.dispatch_forever();
 }
}
In/activity
#include "mbed.h"
#include "LSM6DS3.h"
#define I2C_SDA PB_9
#define I2C_SCL PB_8
EventQueue eQueue(2 * EVENTS_EVENT_SIZE);
LSM6DS3 accel(I2C_SDA, I2C_SCL);
InterruptIn accelInt(PA_9, PullDown);
void accelIntCb() {
 char data[1];
 if (accel.getWakeupReason(data)) {
 if (data[0] & LSM6DS_WAKEUP_SRC_SLEEP_STATE_IA) {
 if (data[0] & 0b111) {
 debug("Activity\n");
 } else {
 debug("Inactivity\n");
 }
 }
 }
}
int main() {
 if (!accel.init()) {
 debug("Could not init\n");
 return 0;
 }
 if (!accel.setupAccel(LSM6DS3::AccelODR_52Hz, LSM6DS3::AccelScale_4G)) {
 debug("Couldn't setup setup slow ODR accel\n");
 return 0;
 }
 if (!accel.setAccelFilter(LSM6DS3::AccelSlopeFilter)) {
 debug("Couldn't setup filter\n");
 return 0;
 }
 if (!accel.setWakeup(2, 2, 1)) { // threshold, wakeup time, sleep time
 debug("Couldn't setup wakeup\n");
 return 0;
 }
 if (!accel.enableInactivity(true)) {
 debug("Couldn't setup inactivity\n");
 return 0;
 }
 if (!accel.setFnINT1(0b10000000)) {
 debug("Couldn't setup setup INT\n");
 return 0;
 }
 accelInt.rise(eQueue.event(accelIntCb));
 while (1) {
 eQueue.dispatch_forever();
 }
}

About

Mbed library for LSM6DSx accel & gyro

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Contributors

Languages

AltStyle によって変換されたページ (->オリジナル) /