| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- /*****************************************************************************/
- // FreeFallDetect.ino
- // Hardware: Grove - 6-Axis Accelerometer&Gyroscope
- // Arduino IDE: Arduino-1.65
- // Author: Lambor
- // Date: Nov,2015
- // Version: v1.0
- //
- // Modified by:
- // Data:
- // Description:
- //
- // by www.seeedstudio.com
- //
- // This library is free software; you can redistribute it and/or
- // modify it under the terms of the GNU Lesser General Public
- // License as published by the Free Software Foundation; either
- // version 2.1 of the License, or (at your option) any later version.
- //
- // This library is distributed in the hope that it will be useful,
- // but WITHOUT ANY WARRANTY; without even the implied warranty of
- // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- // Lesser General Public License for more details.
- //
- // You should have received a copy of the GNU Lesser General Public
- // License along with this library; if not, write to the Free Software
- // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- //
- /*******************************************************************************/
- #include "SparkFunLSM6DS3.h"
- #include "Wire.h"
- #define CLEAR_STEP true
- #define NOT_CLEAR_STEP false
- //Create a instance of class LSM6DS3
- LSM6DS3 lsm6ds3( I2C_MODE, 0x6A ); //I2C device address 0x6A
- uint16_t detectCount = 0;
- void setup() {
- Serial.begin(9600);
- if( lsm6ds3.begin() != 0 ){
- Serial.println("Device error");
- }
- else{
- Serial.println("Device OK!");
- }
-
- if(0 != config_free_fall_detect())
- Serial.println("Fail to configure!");
- else
- Serial.println("Success to Configure!");
- }
- void loop()
- {
- uint8_t readDataByte = 0;
- //Read the wake-up source register
- lsm6ds3.readRegister(&readDataByte, LSM6DS3_ACC_GYRO_WAKE_UP_SRC);
- //Mask off the FF_IA bit for free-fall detection
- readDataByte &= 0x20;
- if( readDataByte )
- {
- detectCount ++;
- Serial.print("Free fall detected! ");
- Serial.println(detectCount);
- }
- delay(10);
- }
- int config_free_fall_detect(void)
- {
- uint8_t error = 0;
- uint8_t dataToWrite = 0;
-
- dataToWrite |= LSM6DS3_ACC_GYRO_BW_XL_200Hz;
- dataToWrite |= LSM6DS3_ACC_GYRO_FS_XL_2g;
- dataToWrite |= LSM6DS3_ACC_GYRO_ODR_XL_416Hz;
-
- error += lsm6ds3.writeRegister(LSM6DS3_ACC_GYRO_CTRL1_XL, dataToWrite);
- error += lsm6ds3.writeRegister( LSM6DS3_ACC_GYRO_WAKE_UP_DUR, 0x00 );
- error += lsm6ds3.writeRegister(LSM6DS3_ACC_GYRO_FREE_FALL, 0x33);
- error += lsm6ds3.writeRegister( LSM6DS3_ACC_GYRO_MD1_CFG, 0x10 );
- error += lsm6ds3.writeRegister( LSM6DS3_ACC_GYRO_MD2_CFG, 0x10 );
- error += lsm6ds3.writeRegister(LSM6DS3_ACC_GYRO_TAP_CFG1, 0x01);
-
- return error;
- }
|