AS7341可见光传感器

简介

IIS2ICLX是一款具有嵌入式机器学习核心的超高性能两轴数字线性加速度计,测量范围为±0.5/±1/±2/±3g,具有高精度(超低噪声,高稳定性和可重复性)、高分辨率和低功耗的特点,十分适合用于倾角测量应用(测斜仪)。IIS2ICLX强大的嵌入式功能集(可编程FSM,机器学习核心,传感器中枢,3Kbyte的FIFO,事件解码和中断),可用于实现智能和复杂的传感器节点,这些节点能在非常低的功耗下提供高精度和高性能。-40°C至+105°C的工作温度范围非常适合集成到机器人或工业级的项目中。

特性

  • 耐高温(工作温度:-40°C~+105°C)
  • 高精度(超低噪声,高稳定性和可重复性)
  • 嵌入式功能集(可编程FSM,机器学习核心,传感器中枢,3Kbyte的FIFO,事件解码和中断)

应用场景

  • 精密测斜仪、水准仪
  • 机器人与工业自动化
  • 设备的安装和监控

技术规格

  • 工作电压:3.3V
  • 平均功耗:0.479mA
  • 接口方式:IIC/SPI
  • 可选的满刻度:±0.5 /±1 /±2 /±3 g
  • 谐振频率:900Hz
  • 数字输出数据频率:12.5-833Hz
  • 超低噪声性能:15 µg
  • 工作温度范围:-40°C至+105°C
  • 非线性:<0.1%FS
  • 灵敏度:±2%mg/LSB
  • 启动时间:15ms

引脚说明

序号 丝印 功能描述
1 VCC 3.3v~5.5v电源输入
2 3V3 3.3v电源输入/输出
3 GND 电源负极
4 SCL I2C时钟线
5 SDA I2C数据线
6 SCK I2C时钟控制线
7 SDI SPI数据线(输入)
8 SDO SPI数据线(输出)
9 CS SPI 片选线
10 INT1 中断引脚1
11 INT2 中断引脚2

注意: 所有数据输出电压均为3.3V

不同通信方式连线提示:

- I2C

- SPI

中断引脚连接

主板 默认连接引脚
UNO/MEGA2560 2
Leonardo 3
Micro:\bit P0
ESP32/ESP8266/ARDUINO_SAM_ZERO(M0) D6
Raspberry Pi GPIO25

M0 使用教程

准备

关于如何安装库文件,点击链接

关于如何使用Firebeetle Board-M0,点击链接


/**
   * @brief 芯片初始化
   */
  void begin(){};

  /**
   * @brief 获取传感器ID
     @return 返回八位ID数据
   */
  uint8_t getID();
  
  /**
   * @brief 设置传感器转换加速度数据的频率
   * @param rate,数据输出频率
                 /<以下参数属于 IIS2ICLX两轴加速度传感器>/
                 IIS2ICLX_RATE_0HZ      /<shutdown>/
                 IIS2ICLX_RATE_12HZ5    /<12.5hz>/
                 IIS2ICLX_RATE_26HZ     /<26hz>/
                 IIS2ICLX_RATE_52HZ     /<52hz>/
                 IIS2ICLX_RATE_104HZ    /<104hz>/
                 IIS2ICLX_RATE_208HZ    /<208hz>/
                 IIS2ICLX_RATE_416HZ    /<416hz>/
                 IIS2ICLX_RATE_833HZ    /<833hz>/
                 /<其它传感器>/
   */
  void setDataRate(uint16_t rate);
  
  /**
   * @brief 设置加速度测量的量程
   * @param range 量程
                  /<以下参数属于 IIS2ICLX两轴加速度传感器>/
                  IIS2ICLX_500_MG       /<±500mg>/
                  IIS2ICLX_1_G          /<±1g>/
                  IIS2ICLX_2_G          /<±2g>/
                  IIS2ICLX_3_G          /<±3g>/
                  /<其它传感器>/
   */
  void setRange(uint16_t range);
  
  /**
   * @brief Read the acceleration in the x direction
   * @return  Acceleration data from x(mg),测量的量程通过setRange()函数设置
   */
  int16_t readAccX();

  /**
   * @brief Read the acceleration in the y direction
   * @return  Acceleration data from y(mg),测量的量程通过setRange()函数设置
   */
  int16_t readAccY();
  
  /**
   * @brief 选择在中断1引脚产生的中断事件
   * @param event  中断事件,当此事件产生会在中断1引脚产生电平跳变
                   /<以下参数属于 IIS2ICLX两轴加速度传感器>/
                   IIS2ICLX_WAKEUP          /<wake up 事件>/
                   IIS2ICLX_SINGLE_TAP     /<单击事件>/
                   IIS2ICLX_DOUBLE_TAP    /<双击事件>/
                   IIS2ICLX_MOTION       /<静止/运动检测>/
                   /<其它传感器>/
   */
  void setInt1Event(uint16_t event);

  /**
   * @brief 选择在中断2引脚产生的中断事件
   * @param event  中断事件,当此事件产生会在中断2引脚产生电平跳变
                   /<以下参数属于 IIS2ICLX两轴加速度传感器>/
                   IIS2ICLX_WAKEUP        /<wake up 事件>/
                   IIS2ICLX_SINGLE_TAP    /<单击事件>/
                   IIS2ICLX_DOUBLE_TAP    /<双击事件>/
                   IIS2ICLX_MOTION        /<静止/运动检测>/
                   /<其它传感器>/
   */
  void setInt2Event(uint16_t event);
  
  /**
   * @brief 使能中断,只有使能了中断才能正常产生中断信号,并对对应寄存器里面的中断标志位置位
   * @param enable ture(使能中断)\false(禁用中断)
   */
  void enableInterrupt(bool enable);
  
  /**
   * @brief 设置唤醒的传感器的阈值,只有当采集到的数据大于此值,模块才离开睡眠状态
   * @param th threshold ,unit:mg,数值是在量程之内
   */
  void setWakeUpthreshold(float th);
  
  /**
   * @brief Set the tap threshold in the X direction
   * @param th Threshold(mg),当超过此阈值会发生敲击事件
   */
  void setTapThresholdOnX(float th);

  /**
   * @brief Set the tap threshold in the X and Y direction
   * @param th Threshold(mg),当超过此阈值会发生敲击事件
   */
  void setTapThreshold(float th);
  
  /**
   * @brief Set the tap threshold in the Y direction
   * @param th Threshold(mg),当超过此阈值会发生敲击事件
   */
  void setTapThresholdOnY(float th);

  /**
   * @brief 设置quiet time,用于双击事件识别中,在首次敲击被识别到后的quiet time时间内,
   * @n 任何加速度的抖动都不会被识别为另一次敲击,在quiet time后duration time时间内发
   * @n 生的敲击才会被认定为双击事件中的第二次敲击。这个时间的设置意义在于防抖。
   * @param quiet  quiet time 范围 0 ~ 3
   * @n time = quiet * (4/rate)(unit:s) 
     |                                  参数与时间之间的线性关系的示例                                     |
     |-----------------------------------------------------------------------------------------------------|
     |                  |                           |                          |                           |
     |  Data rate       |       12.5 Hz             |       26 Hz              |        52 Hz              |
     |-----------------------------------------------------------------------------------------------------|
     |   time           |quiet*(4s/12.5)=quiet*320ms|quiet*(4s/26)=quiet*153ms | quiet*(4s/52)= quiet*75ms |
     |---------------------------------------------------------------------------------------------------- |
   */
  void setTapQuiet(uint8_t quiet);
  
  /**
   * @brief 设置双击事件中两次敲击间的时间间隔。
   * @param dur  duration time 范围 0 ~ 15
   * @n time = dur * (8/rate)(unit:s) 
     |                                  参数与时间之间的线性关系的示例                                    |
     |----------------------------------------------------------------------------------------------------|
     |                  |                         |                          |                            |
     |  Data rate       |       12.5 Hz           |       26 Hz              |        52 Hz               |
     |----------------------------------------------------------------------------------------------------|
     |   time           |dur*(32s/12.5)=dur*2560ms|dur*(32s/26)=dur*1230ms   | dur*(32s/52)= dur*615ms    |
     |--------------------------------------------------------------------------------------------------- |
   */
  void setTapDur(uint8_t dur);

  /**
   * @brief 设置shock time,从加速度大于阈值的时候开始计时,在shock time时间后,
   * @n 如果对应方向的加速度回归到小于阈值的水平,则被判定为敲击事件,若在shock 
   * @n time时间后对应方向的加速度还是大于阈值,则不会被识别为敲击事件而是运动
   * @param shock  shock time 范围 0 ~3
   * @n time = shock * (8/rate)(unit:s) 
     |                                  参数与时间之间的线性关系的示例                                     |
     |-----------------------------------------------------------------------------------------------------|
     |                  |                           |                          |                           |
     |  Data rate       |       12.5 Hz             |       26 Hz              |        52 Hz              |
     |-----------------------------------------------------------------------------------------------------|
     |   time           |shock*(8s/12.5)=shock*640ms|shock*(8s/26)=shock*307ms | shock*(8s/52)= shock*153ms|
     |---------------------------------------------------------------------------------------------------- |
   */
  void setTapShock(uint8_t shock);

  /**
   * @brief Set the tap detection mode,仅检测单击或者仅检测双击
   * @param mode 点击检测模式
                  IIS_SINGLE_TAP   /<检测单击>/
                  IIS_DOUBLE_TAP  /<检测双击>/
   */
  void setTapMode(uint8_t mode);

  /**
   * @brief 检测是否有点击事件产生
   * @return true(有点击事件)/false(没有点击事件)
   */
  bool tapDetected();
  
  /**
   * @brief 获取敲击的类型,双击或者单击
   * @return IIS_SINGLE_TAP 单击事件
             IIS_DOUBLE_TAP 双击事件
   */
  uint8_t getTapType();
  
  /**
   * @brief 设置唤醒的持续时间,在此时间后,若两个方向的加速度数据小于唤醒阈值,那么模块会进入睡眠状态
   * @param dur  duration time 范围 0 ~ 15
   * @n time = dur * (512/rate)(unit:s) 
     |                                  参数与时间之间的线性关系的示例                                     |
     |-----------------------------------------------------------------------------------------------------|
     |                  |                          |                          |                            |
     |  Data rate       |       12.5 Hz            |       26 Hz              |        52 Hz               |
     |-----------------------------------------------------------------------------------------------------|
     |   time           |dur*(512s/12.5)=dur*40s   |  dur*(512s/26)=dur*20s   |  dur*(512s/52)= dur*10s    |
     |---------------------------------------------------------------------------------------------------- |
   */
  void setWakeUpDur(uint8_t dur);
  
  /**
   * @brief 检测模块现在的状态是静止还是运动
   * @return true(产生运动)/false(传感器未运动)
   */
  bool actDetected();

  /**
   * @brief 滤波路径选择
   * @param  path  滤波路径
              IIS2ICLX_HPF     /<滤波选择为high-pass digital filter,高通滤波>/
              IIS2ICLX_SLOPE   /<滤波选择为slope filter,斜率滤波>/
   */
  void setFilterPath(uint16_t path);
  
  /**
   * @brief 锁存中断
   * @param  enable  是否锁存中断,中断锁存后,当中断引脚正常电平是低电平,中断产生后会一直保持高电平
   * @n 直到数据寄存器被读取,电平状态才恢复为低电平
              true  /<中断引脚电平被锁存,等到数据寄存器被读取才会恢复正常电平>/
              false /<中断不被锁存,当中断产生时,中断引脚会产生一个电平脉冲>/
   */
  void latchInterrupt(bool enable);
  
  /**
   * @brief 睡眠唤醒检测
   * @return true(模块从睡眠状态唤醒)/false(模块仍处于睡眠状态)
   */
  bool wakeUpDetected();

  /**
   * @brief 唤醒的运动方向检测
   * @return   eDirX    /<X方向的运动唤醒芯片>/
               eDirY    /<Y方向的运动唤醒芯片>/
               eDirError,/<检测错误>/
   */
  eWakeUpDir_t getWakeUpDir();
  
  /**
   * @brief 点击方向的源头检测
   * @return   eDirXPositive   /<从 X 正方向发生的点击事件>/
               eDirXNegative /<从 X 负方向发生的点击事件>/
               eDirYPositive   /<从 Y 正方向发生的点击事件>/
               eDirYNegative /<从 Y 负方向发生的点击事件>/
   */
  eTapDir_t getTapDirection();

样例代码1-运动监测功能(activityDetect.ino)

  • 选择activityDetect.ino

  • 烧录程序

/**!
 * @file activityDetect.ino
 * @brief 运动静止检测,可以检测模块是否在运动,检测的阈值可以通过setWakeUpthreshold()
 * @n 函数设置,设置的值越小,检测越灵敏
 * @n 在使用SPI时片选引脚可以通过 IIS2ICLX_CS_CS 的值修改
 * @copyright  Copyright (c) 2010 DFRobot Co.Ltd (http://www.dfrobot.com)
 * @licence     The MIT License (MIT)
 * @author [fengli](li.feng@dfrobot.com)
 * @version  V1.0
 * @date  2021-04-16
 * @get from https://www.dfrobot.com
 * @https://github.com/DFRobot/DFRobot_IIS
 */

#include <DFRobot_IIS2ICLX.h>
//当你使用I2C通信时,使用下面这段程序,使用DFRobot_IIS2ICLX_I2C构造对象
/*!
 * @brief Constructor 
 * @param addr  I2C address(0x6B)
 * @param pWire I2c controller
 */
//DFRobot_IIS2ICLX_I2C iis2iclx (0x6B,&Wire);
DFRobot_IIS2ICLX_I2C iis2iclx ;

//当你使用SPI通信时,使用下面这段程序,使用DFRobot_IIS2ICLX_SPI构造对象
#if defined(ESP32) || defined(ESP8266)
#define IIS2ICLX_CS  D3
#elif defined(__AVR__) || defined(ARDUINO_SAM_ZERO)
#define IIS2ICLX_CS 3
#elif (defined NRF5)
#define IIS2ICLX_CS 2
#endif
/*!
 * @brief Constructor 
 * @param cs : Chip selection pinChip selection pin
 * @param spi :SPI controller
 */
//DFRobot_IIS2ICLX_SPI iis2iclx(/*cs = */IIS2ICLX_CS,&SPI);
//DFRobot_IIS2ICLX_SPI iis2iclx(/*cs = */IIS2ICLX_CS);
void setup(void)
{
  Serial.begin(9600);
  iis2iclx.begin();
  //芯片软复位
  iis2iclx.reset();
  
  /*
    加速度采集速率设置
    参数可取: IIS2ICLX_RATE_0HZ   //0hz
               IIS2ICLX_RATE_12HZ5 //12.5hz
               IIS2ICLX_RATE_26HZ  //26hz
               IIS2ICLX_RATE_52HZ  //52hz
               IIS2ICLX_RATE_104HZ //104hz
               IIS2ICLX_RATE_208HZ //208hz
               IIS2ICLX_RATE_416HZ //416hz
               IIS2ICLX_RATE_833HZ //833hz
  */
  iis2iclx.setDataRate(IIS2ICLX_RATE_833HZ);

  /*
    加速度采集量程
    参数可取:    IIS2ICLX_500_MG       /<±500mg>/
                  IIS2ICLX_1_G          /<±1g>/
                  IIS2ICLX_2_G          /<±2g>/
                  IIS2ICLX_3_G          /<±3g>/
  */
  iis2iclx.setRange(IIS2ICLX_2_G);

  /*
    滤波方式选择
    参数可取:IIS2ICLX_HPF    //滤波器选择为high-pass digital filter
              IIS2ICLX_SLOPE    //滤波器选择为slope filter
  */
  iis2iclx.setFilterPath(IIS2ICLX_SLOPE);
  
  //使能传感器中断
  iis2iclx.enableInterrupt(true);
  //设置运动检测阈值,单位为(g),数值是在量程之内
  iis2iclx.setWakeUpthreshold(0.1);
  
  /*
    选择在中断1引脚产生的中断事件
    参数可取:IIS2ICLX_WAKEUP            //wake up 事件
              IIS2ICLX_SINGLE_TAP         //单击事件
              IIS2ICLX_DOUBLE_TAP         //双击事件
              IIS2ICLX_MOTION //静止/运动检测
  */
  iis2iclx.setInt1Event(IIS2ICLX_MOTION);
  //iis2iclx.setInt2Event(IIS2ICLX_MOTION);
  
  /*
    设置唤醒的持续时间,在此时间后,若两个方向的加速度数据小于
    唤醒阈值,那么模块会进入睡眠状态
     time = dur * (512/rate)(unit:s) 
     |                                  参数与时间之间的线性关系的示例                                     |
     |-----------------------------------------------------------------------------------------------------|
     |                  |                          |                          |                            |
     |  Data rate       |       12.5 Hz            |       26 Hz              |        52 Hz               |
     |-----------------------------------------------------------------------------------------------------|
     |   time           |dur*(512s/12.5)=dur*40s   |dur*(512s/26)=dur*20s  | dur*(3512s/52)= dur*10ms |
     |---------------------------------------------------------------------------------------------------- |
  */
  iis2iclx.setWakeUpDur(/*dur = */1);
}

void loop(void)
{
 
   delay(100);
   //检测模块是否在运动,模块被唤醒后会在Sleep Duration 时间内都处于运动状态这个事件通过 setWakeUpDur()函数设置
   if(iis2iclx.actDetected()){
      Serial.println("motion");
      delay(200);
   }
 
}

结果

样例代码2-运动中断功能(activityDetectInterrupt.ino)

  • 选择activityDetectInterrupt.ino

  • 烧录程序

/**!
 * @file activityDetectInterrupt.ino
 * @brief 通过中断引脚检测运动,可以检测模块是否在运动,检测的阈值可以通过setWakeUpthreshold()
 * @n 函数设置,设置的值越小,检测越灵敏
 * @n 在使用SPI时片选引脚可以通过 IIS2ICLX_CS 的值修改
 * @copyright  Copyright (c) 2010 DFRobot Co.Ltd (http://www.dfrobot.com)
 * @licence     The MIT License (MIT)
 * @author [fengli](li.feng@dfrobot.com)
 * @version  V1.0
 * @date  2021-04-16
 * @get from https://www.dfrobot.com
 * @https://github.com/DFRobot/DFRobot_IIS
 */

#include <DFRobot_IIS2ICLX.h>
//当你使用I2C通信时,使用下面这段程序,使用DFRobot_IIS2ICLX_I2C构造对象
/*!
 * @brief Constructor 
 * @param addr  I2C address(0x6B)
 * @param pWire I2c controller
 */
//DFRobot_IIS2ICLX_I2C iis2iclx (0x6B,&Wire);
DFRobot_IIS2ICLX_I2C iis2iclx ;

//当你使用SPI通信时,使用下面这段程序,使用DFRobot_IIS2ICLX_SPI构造对象
#if defined(ESP32) || defined(ESP8266)
#define IIS2ICLX_CS  D3
#elif defined(__AVR__) || defined(ARDUINO_SAM_ZERO)
#define IIS2ICLX_CS 3
#elif (defined NRF5)
#define IIS2ICLX_CS 2
#endif
/*!
 * @brief Constructor 
 * @param cs : Chip selection pinChip selection pin
 * @param spi :SPI controller
 */
//DFRobot_IIS2ICLX_SPI iis2iclx(/*cs = */IIS2ICLX_CS,&SPI);
//DFRobot_IIS2ICLX_SPI iis2iclx(/*cs = */IIS2ICLX_CS);
volatile uint8_t intFlag = 0;
//外部中断服务函数
void interEvent(){
  //Serial.println("wake up detected !");
  intFlag = 1;
}
void setup(void)
{
  Serial.begin(9600);
  iis2iclx.begin();
  //芯片软复位
  iis2iclx.reset();
  
  /*
    加速度采集速率设置
    参数可取: IIS2ICLX_RATE_0HZ   //0hz
               IIS2ICLX_RATE_12HZ5 //12.5hz
               IIS2ICLX_RATE_26HZ  //26hz
               IIS2ICLX_RATE_52HZ  //52hz
               IIS2ICLX_RATE_104HZ //104hz
               IIS2ICLX_RATE_208HZ //208hz
               IIS2ICLX_RATE_416HZ //416hz
               IIS2ICLX_RATE_833HZ //833hz
  */
  iis2iclx.setDataRate(IIS2ICLX_RATE_833HZ);

  /*
    加速度采集量程
    参数可取:    IIS2ICLX_500_MG       /<±500mg>/
                  IIS2ICLX_1_G          /<±1g>/
                  IIS2ICLX_2_G          /<±2g>/
                  IIS2ICLX_3_G          /<±3g>/
  */
  iis2iclx.setRange(IIS2ICLX_2_G);

  /*
    滤波方式选择
    参数可取:IIS2ICLX_HPF    //滤波器选择为high-pass digital filter
              IIS2ICLX_SLOPE    //滤波器选择为slope filter
  */
  iis2iclx.setFilterPath(IIS2ICLX_SLOPE);
  
  //使能传感器中断
  iis2iclx.enableInterrupt(true);
  //设置运动检测阈值,单位为(g),数值是在量程之内
  iis2iclx.setWakeUpthreshold(1);
  
  /*
    选择在中断1引脚产生的中断事件
    参数可取:IIS2ICLX_WAKEUP            //wake up 事件
              IIS2ICLX_SINGLE_TAP         //单击事件
              IIS2ICLX_DOUBLE_TAP         //双击事件
              IIS2ICLX_MOTION //静止/运动检测
  */
  iis2iclx.setInt1Event(IIS2ICLX_MOTION);
  //iis2iclx.setInt2Event(IIS2ICLX_MOTION);
  
  /*
    设置唤醒的持续时间,在此时间后,若两个方向的加速度数据小于
    唤醒阈值,那么模块会进入睡眠状态
     time = dur * (512/rate)(unit:s) 
     |                                  参数与时间之间的线性关系的示例                                     |
     |-----------------------------------------------------------------------------------------------------|
     |                  |                          |                          |                            |
     |  Data rate       |       12.5 Hz            |       26 Hz              |        52 Hz               |
     |-----------------------------------------------------------------------------------------------------|
     |   time           |dur*(512s/12.5)=dur*40s   |dur*(512s/26)=dur*20s  | dur*(3512s/52)= dur*10ms |
     |---------------------------------------------------------------------------------------------------- |
  */
  iis2iclx.setWakeUpDur(/*dur = */1);
  
  #if defined(ESP32) || defined(ESP8266)
  //默认使用D6引脚作为中断引脚,也可以选择其它不冲突的引脚作为外部中断引脚
  attachInterrupt(digitalPinToInterrupt(D6)/*Query the interrupt number of the D6 pin*/,interEvent,CHANGE);
  #elif defined(ARDUINO_SAM_ZERO)
  //默认使用5引脚作为中断引脚,也可以选择其它不冲突的引脚作为外部中断引脚
  attachInterrupt(digitalPinToInterrupt(5)/*Query the interrupt number of the 5 pin*/,interEvent,CHANGE);
  #else
  /*    The Correspondence Table of AVR Series Arduino Interrupt Pins And Terminal Numbers
   * ---------------------------------------------------------------------------------------
   * |                                        |  DigitalPin  | 2  | 3  |                   |
   * |    Uno, Nano, Mini, other 328-based    |--------------------------------------------|
   * |                                        | Interrupt No | 0  | 1  |                   |
   * |-------------------------------------------------------------------------------------|
   * |                                        |    Pin       | 2  | 3  | 21 | 20 | 19 | 18 |
   * |               Mega2560                 |--------------------------------------------|
   * |                                        | Interrupt No | 0  | 1  | 2  | 3  | 4  | 5  |
   * |-------------------------------------------------------------------------------------|
   * |                                        |    Pin       | 3  | 2  | 0  | 1  | 7  |    |
   * |    Leonardo, other 32u4-based          |--------------------------------------------|
   * |                                        | Interrupt No | 0  | 1  | 2  | 3  | 4  |    |
   * |--------------------------------------------------------------------------------------
   */
  /*                      The Correspondence Table of micro:bit Interrupt Pins And Terminal Numbers
   * ---------------------------------------------------------------------------------------------------------------------------------------------
   * |             micro:bit                       | DigitalPin |P0-P20 can be used as an external interrupt                                     |
   * |  (When using as an external interrupt,      |---------------------------------------------------------------------------------------------|
   * |no need to set it to input mode with pinMode)|Interrupt No|Interrupt number is a pin digital value, such as P0 interrupt number 0, P1 is 1 |
   * |-------------------------------------------------------------------------------------------------------------------------------------------|
   */
  attachInterrupt(/*Interrupt No*/0,interEvent,CHANGE);//Open the external interrupt 0, connect INT1/2 to the digital pin of the main control: 
     //UNO(2), Mega2560(2), Leonardo(3), microbit(P0).
  #endif
  //是否锁存中断,中断锁存后,当中断引脚正常电平是低电平,中断产生后
  //会一直保持高电平,直到相应的状态寄存器被读取,电平状态才恢复为低电平
  iis2iclx.latchInterrupt(false);
}

void loop(void)
{
 
   delay(10);
   //检测模块是否在运动,模块被唤醒后会在Sleep Duration 时间内都处于运动状态这个事件通过 setWakeUpDur()函数设置
   //只有当模块从运动状态到静止状态,或从静止状态到正常状态才会产生中断
   if(intFlag == 1){
     if(iis2iclx.actDetected()){
      Serial.println("motion");
     }
     delay(200);
     intFlag = 0;
  }
}

结果

样例代码3-读取X,Y,Z轴加速度(getAcceleration.ino)

  • 选择getAcceleration.ino

  • 烧录程序

/**!
 * @file getAcceleration.ino
 * @brief Get the acceleration in x, y, directions,测量的量程为±500mg,±1g,±2g或±3g,通过setRange()函数设置
 * @n 在使用SPI时片选引脚可以通过 IIS2ICLX_CS 的值修改
 * @copyright  Copyright (c) 2010 DFRobot Co.Ltd (http://www.dfrobot.com)
 * @licence     The MIT License (MIT)
 * @author [fengli](li.feng@dfrobot.com)
 * @version  V1.0
 * @date  2021-04-16
 * @get from https://www.dfrobot.com
 * @https://github.com/DFRobot/DFRobot_IIS
 */

#include <DFRobot_IIS2ICLX.h>

//当你使用I2C通信时,使用下面这段程序,使用DFRobot_IIS2ICLX_I2C构造对象
/*!
 * @brief Constructor 
 * @param addr  I2C address(0x6B)
 * @param pWire I2c controller
 */
//DFRobot_IIS2ICLX_I2C iis2iclx (0x6B,&Wire);
DFRobot_IIS2ICLX_I2C iis2iclx ;

//当你使用SPI通信时,使用下面这段程序,使用DFRobot_IIS2ICLX_SPI构造对象
#if defined(ESP32) || defined(ESP8266)
#define IIS2ICLX_CS  D3
#elif defined(__AVR__) || defined(ARDUINO_SAM_ZERO)
#define IIS2ICLX_CS 3
#elif (defined NRF5)
#define IIS2ICLX_CS 2
#endif
/*!
 * @brief Constructor 
 * @param cs : Chip selection pinChip selection pin
 * @param spi :SPI controller
 */
//DFRobot_IIS2ICLX_SPI iis2iclx(/*cs = */IIS2ICLX_CS,&SPI);
//DFRobot_IIS2ICLX_SPI iis2iclx(/*cs = */IIS2ICLX_CS);
void setup(void)
{
  Serial.begin(9600);
  //芯片初始化
  iis2iclx.begin();
  //芯片软复位
  iis2iclx.reset();
  //获取传感器id
  Serial.print("芯片ID: 0X");
  Serial.println(iis2iclx.getID(),HEX);
  
  /*
    加速度采集速率设置
    参数可取: IIS2ICLX_RATE_0HZ   //0hz
               IIS2ICLX_RATE_12HZ5 //12.5hz
               IIS2ICLX_RATE_26HZ  //26hz
               IIS2ICLX_RATE_52HZ  //52hz
               IIS2ICLX_RATE_104HZ //104hz
               IIS2ICLX_RATE_208HZ //208hz
               IIS2ICLX_RATE_416HZ //416hz
               IIS2ICLX_RATE_833HZ //833hz
  */
  iis2iclx.setDataRate(IIS2ICLX_RATE_208HZ);

  /*
    加速度采集量程
    参数可取:    IIS2ICLX_500_MG       /<±500mg>/
                  IIS2ICLX_1_G          /<±1g>/
                  IIS2ICLX_2_G          /<±2g>/
                  IIS2ICLX_3_G          /<±3g>/
  */
  iis2iclx.setRange(IIS2ICLX_2_G);
}

void loop(void)
{
  //测量的量程为±500mg,±1g,±2g或±3g,通过setRange()函数设置
  Serial.print("Acceleration x: "); //print acceleration
  //Read the acceleration in the x direction
  Serial.print(iis2iclx.readAccX());
  Serial.print(" mg\t  y: ");
  //Read the acceleration in the x direction
  Serial.print(iis2iclx.readAccY());
  Serial.println(" mg");
  delay(300);
}

结果

样例代码4-敲击监测功能(tap.ino)

  • 选择tap.ino

  • 烧录程序

/**!
 * @file tap.ino
 * @brief Single tap and double tap detection,点击模块,或者点击模块附件的桌面都可以触发点击事件
 * @n 可以通过setTapMode()函数选择只检测单击,或只检测双击
 * @n 在使用SPI时片选引脚可以通过 IIS2ICLX_CS 的值修改
 * @copyright  Copyright (c) 2010 DFRobot Co.Ltd (http://www.dfrobot.com)
 * @licence     The MIT License (MIT)
 * @author [fengli](li.feng@dfrobot.com)
 * @version  V1.0
 * @date  2021-04-16
 * @get from https://www.dfrobot.com
 * @https://github.com/DFRobot/DFRobot_IIS
 */
#include <DFRobot_IIS2ICLX.h>
//当你使用I2C通信时,使用下面这段程序,使用DFRobot_IIS2ICLX_I2C构造对象
/*!
 * @brief Constructor 
 * @param addr  I2C address(0x6B)
 * @param pWire I2c controller
 */
//DFRobot_IIS2ICLX_I2C iis2iclx (0x6B,&Wire);
DFRobot_IIS2ICLX_I2C iis2iclx ;

//当你使用SPI通信时,使用下面这段程序,使用DFRobot_IIS2ICLX_SPI构造对象
#if defined(ESP32) || defined(ESP8266)
#define IIS2ICLX_CS  D3
#elif defined(__AVR__) || defined(ARDUINO_SAM_ZERO)
#define IIS2ICLX_CS 3
#elif (defined NRF5)
#define IIS2ICLX_CS 2
#endif
/*!
 * @brief Constructor 
 * @param cs : Chip selection pinChip selection pin
 * @param spi :SPI controller
 */
//DFRobot_IIS2ICLX_SPI iis2iclx(/*cs = */IIS2ICLX_CS,&SPI);
//DFRobot_IIS2ICLX_SPI iis2iclx(/*cs = */IIS2ICLX_CS);
void setup(void)
{
  Serial.begin(9600);
  //函数初始化
  iis2iclx.begin();
  //芯片软复位
  iis2iclx.reset();
  /*
    加速度采集速率设置
    参数可取: IIS2ICLX_RATE_0HZ   //0hz
               IIS2ICLX_RATE_12HZ5 //12.5hz
               IIS2ICLX_RATE_26HZ  //26hz
               IIS2ICLX_RATE_52HZ  //52hz
               IIS2ICLX_RATE_104HZ //104hz
               IIS2ICLX_RATE_208HZ //208hz
               IIS2ICLX_RATE_416HZ //416hz
               IIS2ICLX_RATE_833HZ //833hz
  */
  iis2iclx.setDataRate(IIS2ICLX_RATE_416HZ);

  /*
    加速度采集量程
    参数可取:    IIS2ICLX_500_MG       /<±500mg>/
                  IIS2ICLX_1_G          /<±1g>/
                  IIS2ICLX_2_G          /<±2g>/
                  IIS2ICLX_3_G          /<±3g>/
  */
  iis2iclx.setRange(IIS2ICLX_2_G);
  
  //设置x,y方向上的点击阈值
  iis2iclx.setTapThreshold(0.1);
  //使能中断
  iis2iclx.enableInterrupt(true);
  /*
     设置quiet time,用于双击事件识别中,在首次敲击被识别到后的quiet time时间内,任何加速度的抖动都不会被识别为另一次敲击,在quiet time后duration time时间内发生的敲击才会被认定为双击事件中的第二次敲击
     quiet  quiet time 范围 0 ~ 3
     time = quiet * (4/rate)(unit:s) 
     |                                  参数与时间之间的线性关系的示例                                     |
     |-----------------------------------------------------------------------------------------------------|
     |                  |                           |                          |                           |
     |  Data rate       |       12.5 Hz             |       26 Hz              |        52 Hz              |
     |-----------------------------------------------------------------------------------------------------|
     |   time           |quiet*(4s/12.5)=quiet*320ms|quiet*(4s/26)=quiet*153ms | quiet*(4s/52)= quiet*75ms |
     |---------------------------------------------------------------------------------------------------- |
   */
  iis2iclx.setTapQuiet(/*quiet = */0);
  
  /*
     设置shock time,从加速度大于阈值的时候开始计时,在shock time时间后,如果对应方向的加速度回归到小于阈值的水平,则被判定为敲击事件,若在shock time时间后对应方向的加速度还是大于阈值,则不会被识别为敲击事件而是运动
     shock  shock time 范围 0 ~3
     time = shock * (8/rate)(unit:s) 
     |                                  参数与时间之间的线性关系的示例                                     |
     |-----------------------------------------------------------------------------------------------------|
     |                  |                           |                          |                           |
     |  Data rate       |       12.5 Hz             |       26 Hz              |        52 Hz              |
     |-----------------------------------------------------------------------------------------------------|
     |   time           |shock*(8s/12.5)=shock*640ms|shock*(8s/26)=shock*307ms | shock*(8s/52)= shock*153ms|
     |---------------------------------------------------------------------------------------------------- |
   */
  iis2iclx.setTapShock(/*shock = */0);
  
  /*
    设置双击模式下,双击事件的两次点击的间隔时间
    dur  duration time 范围 0 ~ 15
    time = dur * (8/rate)(unit:s) 
     |                                  参数与时间之间的线性关系的示例                                    |
     |----------------------------------------------------------------------------------------------------|
     |                  |                         |                          |                            |
     |  Data rate       |       12.5 Hz           |       26 Hz              |        52 Hz               |
     |----------------------------------------------------------------------------------------------------|
     |   time           |dur*(32s/12.5)=dur*2560ms|dur*(32s/26)=dur*1230ms   | dur*(32s/52)= dur*615ms    |
     |--------------------------------------------------------------------------------------------------- |
   */
  iis2iclx.setTapDur(/*dur = */1);
  /*
    Set the tap detection mode,仅检测单击或者仅检测双击
    参数可取: IIS_SINGLE_TAP   /<检测单击>/
               IIS_DOUBLE_TAP  /<检测双击>/
  */
  iis2iclx.setTapMode(IIS_SINGLE_TAP);
  /*
    选择在中断1引脚产生的中断事件
    参数可取:IIS2ICLX_WAKEUP            //wake up 事件
              IIS2ICLX_SINGLE_TAP         //单击事件
              IIS2ICLX_DOUBLE_TAP         //双击事件
              IIS2ICLX_MOTION //静止/运动检测
  */
  iis2iclx.setInt1Event(IIS2ICLX_SINGLE_TAP);
    //是否锁存中断,中断锁存后,当中断引脚正常电平是低电平,中断产生后
  //会一直保持高电平,直到相应的状态寄存器被读取,电平状态才恢复为低电平
  iis2iclx.latchInterrupt(false);
}

void loop(void)
{
  delay(10);
  //检测是否有点击事件方向
  if(iis2iclx.tapDetected()){
     //得到是什么类型的点击事件,单击或双击
     uint8_t type = iis2iclx.getTapType();
     uint8_t isTap = 0;
     if(type == IIS_SINGLE_TAP){
       isTap = 1;
       Serial.println("single tap :");
     }else if(type == IIS_DOUBLE_TAP){
       isTap = 1;
       Serial.println("double tap :");
     }
    //获取点击事件是在哪个方向发生方向
    if(isTap){
      eTapDir_t dir = iis2iclx.getTapDirection();
      if(dir == eDirXPositive){
        Serial.println("in positive x");
      }
      else if(dir == eDirXNegative){
        Serial.println("in negative x");
      }
      else if(dir == eDirYPositive){
        Serial.println("in positive y");
      }
      else if(dir == eDirYNegative){
        Serial.println("in negative y");
      }
      isTap = 0;
    }
    delay(300);
  }
}

结果

样例代码5-敲击中断功能(tapInterrupt.ino)

  • 选择tapInterrupt.ino

  • 烧录程序

/**!
 * @file tapInterrupt.ino
 * @brief 使用中断信号检测点击事件,点击模块,或者点击模块附件的桌面都可以触发点击事件,
 * @n 可以通过setTapMode()函数选择只检测单击,或只检测双击
 * @n 在使用SPI时片选引脚可以通过 IIS2ICLX_CS 的值修改
 * @copyright  Copyright (c) 2010 DFRobot Co.Ltd (http://www.dfrobot.com)
 * @licence     The MIT License (MIT)
 * @author [fengli](li.feng@dfrobot.com)
 * @version  V1.0
 * @date  2021-04-16
 * @get from https://www.dfrobot.com
 * @https://github.com/DFRobot/DFRobot_IIS
 */
#include <DFRobot_IIS2ICLX.h>

//当你使用I2C通信时,使用下面这段程序,使用DFRobot_IIS2ICLX_I2C构造对象
/*!
 * @brief Constructor 
 * @param addr  I2C address(0x6B)
 * @param pWire I2c controller
 */
//DFRobot_IIS2ICLX_I2C iis2iclx (0x6B,&Wire);
DFRobot_IIS2ICLX_I2C iis2iclx ;

//当你使用SPI通信时,使用下面这段程序,使用DFRobot_IIS2ICLX_SPI构造对象
#if defined(ESP32) || defined(ESP8266)
#define IIS2ICLX_CS  D3
#elif defined(__AVR__) || defined(ARDUINO_SAM_ZERO)
#define IIS2ICLX_CS 3
#elif (defined NRF5)
#define IIS2ICLX_CS 2
#endif
/*!
 * @brief Constructor 
 * @param cs : Chip selection pinChip selection pin
 * @param spi :SPI controller
 */
//DFRobot_IIS2ICLX_SPI iis2iclx(/*cs = */IIS2ICLX_CS,&SPI);
//DFRobot_IIS2ICLX_SPI iis2iclx(/*cs = */IIS2ICLX_CS);
//外部中断服务函数
volatile uint8_t intFlag = 0;
void interEvent(){
  intFlag = 1;

}
void setup(void)
{
  Serial.begin(9600);
  //函数初始化
  iis2iclx.begin();
  //芯片软复位
  iis2iclx.reset();
  /*
    加速度采集速率设置
    参数可取: IIS2ICLX_RATE_0HZ   //0hz
               IIS2ICLX_RATE_12HZ5 //12.5hz
               IIS2ICLX_RATE_26HZ  //26hz
               IIS2ICLX_RATE_52HZ  //52hz
               IIS2ICLX_RATE_104HZ //104hz
               IIS2ICLX_RATE_208HZ //208hz
               IIS2ICLX_RATE_416HZ //416hz
               IIS2ICLX_RATE_833HZ //833hz
  */
  iis2iclx.setDataRate(IIS2ICLX_RATE_416HZ);

  /*
    加速度采集量程
    参数可取:IIS2ICLX_500_MG //±500mg
              IIS2ICLX_3_G    //±3g
              IIS2ICLX_1_G    //±1g
              IIS2ICLX_2_G    //±2g
  */
  iis2iclx.setRange(IIS2ICLX_2_G);
  
  //设置x,y方向上的点击阈值
  iis2iclx.setTapThreshold(0.1);

  //使能中断
  iis2iclx.enableInterrupt(true);
  /*
     设置quiet time,用在双击事件的识别中,当第一个单击事件被识别到后,会有一个quiet time 时间,在这个时间后 duration time前产生另外一个单击事件,才会被识别为双击事件。
     quiet  quiet time 范围 0 ~ 3
     time = quiet * (4/rate)(unit:s) 
     |                                  参数与时间之间的线性关系的示例                                     |
     |-----------------------------------------------------------------------------------------------------|
     |                  |                           |                          |                           |
     |  Data rate       |       12.5 Hz             |       26 Hz              |        52 Hz              |
     |-----------------------------------------------------------------------------------------------------|
     |   time           |quiet*(4s/12.5)=quiet*320ms|quiet*(4s/26)=quiet*153ms | quiet*(4s/52)= quiet*75ms |
     |---------------------------------------------------------------------------------------------------- |
   */
  iis2iclx.setTapQuiet(/*quiet = */1);
  
  /*
     设置shock time,从加速度大于阈值的时候开始计时,在shock time时间后,如果对应方向的加速度回归到小于阈值的水平,
     则被判定为单击事件,若在shock time时间后对应方向的加速度还是大于阈值,则不会被识别为单击事件
     shock  shock time 范围 0 ~3
     time = shock * (8/rate)(unit:s) 
     |                                  参数与时间之间的线性关系的示例                                     |
     |-----------------------------------------------------------------------------------------------------|
     |                  |                           |                          |                           |
     |  Data rate       |       12.5 Hz             |       26 Hz              |        52 Hz              |
     |-----------------------------------------------------------------------------------------------------|
     |   time           |shock*(8s/12.5)=shock*640ms|shock*(8s/26)=shock*307ms | shock*(8s/52)= shock*153ms|
     |---------------------------------------------------------------------------------------------------- |
   */
  iis2iclx.setTapShock(/*shock = */1);
  
  /*
    设置双击模式下,双击事件的两次点击的间隔时间
    dur  duration time 范围 0 ~ 15
    time = dur * (8/rate)(unit:s) 
     |                                  参数与时间之间的线性关系的示例                                    |
     |----------------------------------------------------------------------------------------------------|
     |                  |                         |                          |                            |
     |  Data rate       |       12.5 Hz           |       26 Hz              |        52 Hz               |
     |----------------------------------------------------------------------------------------------------|
     |   time           |dur*(32s/12.5)=dur*2560ms|dur*(32s/26)=dur*1230ms   | dur*(32s/52)= dur*615ms    |
     |--------------------------------------------------------------------------------------------------- |
   */
  iis2iclx.setTapDur(/*dur = */1);
  
  /*
    Set the tap detection mode,仅检测单击或者仅检测双击
    参数可取: IIS_SINGLE_TAP   /<检测单击>/
               IIS_DOUBLE_TAP  /<检测双击>/
  */
  iis2iclx.setTapMode(IIS_SINGLE_TAP);
  
  /*
    选择在中断1引脚产生的中断事件
    参数可取:IIS2ICLX_WAKEUP            //wake up 事件
              IIS2ICLX_SINGLE_TAP         //单击事件
              IIS2ICLX_DOUBLE_TAP         //双击事件
              IIS2ICLX_MOTION //静止/运动检测
  */
  iis2iclx.setInt1Event(IIS2ICLX_SINGLE_TAP);
  #if defined(ESP32) || defined(ESP8266)
  //默认使用D6引脚作为中断引脚,也可以选择其它不冲突的引脚作为外部中断引脚
  attachInterrupt(digitalPinToInterrupt(D6)/*Query the interrupt number of the D6 pin*/,interEvent,CHANGE);
  #elif defined(ARDUINO_SAM_ZERO)
  //默认使用5引脚作为中断引脚,也可以选择其它不冲突的引脚作为外部中断引脚
  attachInterrupt(digitalPinToInterrupt(5)/*Query the interrupt number of the 5 pin*/,interEvent,CHANGE);
  #else
  /*    The Correspondence Table of AVR Series Arduino Interrupt Pins And Terminal Numbers
   * ---------------------------------------------------------------------------------------
   * |                                        |  DigitalPin  | 2  | 3  |                   |
   * |    Uno, Nano, Mini, other 328-based    |--------------------------------------------|
   * |                                        | Interrupt No | 0  | 1  |                   |
   * |-------------------------------------------------------------------------------------|
   * |                                        |    Pin       | 2  | 3  | 21 | 20 | 19 | 18 |
   * |               Mega2560                 |--------------------------------------------|
   * |                                        | Interrupt No | 0  | 1  | 2  | 3  | 4  | 5  |
   * |-------------------------------------------------------------------------------------|
   * |                                        |    Pin       | 3  | 2  | 0  | 1  | 7  |    |
   * |    Leonardo, other 32u4-based          |--------------------------------------------|
   * |                                        | Interrupt No | 0  | 1  | 2  | 3  | 4  |    |
   * |--------------------------------------------------------------------------------------
   */
  /*                      The Correspondence Table of micro:bit Interrupt Pins And Terminal Numbers
   * ---------------------------------------------------------------------------------------------------------------------------------------------
   * |             micro:bit                       | DigitalPin |P0-P20 can be used as an external interrupt                                     |
   * |  (When using as an external interrupt,      |---------------------------------------------------------------------------------------------|
   * |no need to set it to input mode with pinMode)|Interrupt No|Interrupt number is a pin digital value, such as P0 interrupt number 0, P1 is 1 |
   * |-------------------------------------------------------------------------------------------------------------------------------------------|
   */
  attachInterrupt(/*Interrupt No*/0,interEvent,CHANGE);//Open the external interrupt 0, connect INT1/2 to the digital pin of the main control: 
     //UNO(2), Mega2560(2), Leonardo(3), microbit(P0).
  #endif
  //是否锁存中断,中断锁存后,当中断引脚正常电平是低电平,中断产生后
  //会一直保持高电平,直到相应的状态寄存器被读取,电平状态才恢复为低电平
  iis2iclx.latchInterrupt(false);
}

void loop(void)
{

  //检测是否有点击事件方向
  if(intFlag == 1){
    delay(10);
     uint8_t type = iis2iclx.getTapType();
     uint8_t isTap = 0;
     if(type == IIS_SINGLE_TAP){
       isTap = 1;
       Serial.print("single tap :");
     }else if(type == IIS_DOUBLE_TAP){
       isTap = 1;
       Serial.print("double tap :");
     }
    //获取点击事件是在哪个方向发生方向
    if(isTap){
       eTapDir_t dir = iis2iclx.getTapDirection();
       if(dir == eDirXPositive){
         Serial.println("in positive x");
       }
       else if(dir == eDirXNegative){
         Serial.println("in negative x");
       }
       else if(dir == eDirYPositive){
         Serial.println("in positive y");
       }
       else if(dir == eDirYNegative){
         Serial.println("in negative y");
       }
       isTap = 0;
    }
     intFlag = 0;
     delay(200);
  }
}

结果

样例代码6-睡眠唤醒功能(wakeUp.ino)

  • 选择wakeUp.ino

  • 烧录程序

/**!
 * @file wakeUp.ino
 * @brief 睡眠唤醒检测,当某方向的加速度超过阈值后,会产睡眠唤醒事件,可以通过
 * @n 访问状态寄存器或者通过中断引脚int1或者int2检测
 * @n 在使用SPI时片选引脚可以通过 IIS2ICLX_CS 的值修改
 * @copyright  Copyright (c) 2010 DFRobot Co.Ltd (http://www.dfrobot.com)
 * @licence     The MIT License (MIT)
 * @author [fengli](li.feng@dfrobot.com)
 * @version  V1.0
 * @date  2021-04-16
 * @get from https://www.dfrobot.com
 * @https://github.com/DFRobot/DFRobot_IIS
 */
#include <DFRobot_IIS2ICLX.h>
//当你使用I2C通信时,使用下面这段程序,使用DFRobot_IIS2ICLX_I2C构造对象
/*!
 * @brief Constructor 
 * @param addr  I2C address(0x6B)
 * @param pWire I2c controller
 */
//DFRobot_IIS2ICLX_I2C iis2iclx (0x6B,&Wire);
DFRobot_IIS2ICLX_I2C iis2iclx ;

//当你使用SPI通信时,使用下面这段程序,使用DFRobot_IIS2ICLX_SPI构造对象
#if defined(ESP32) || defined(ESP8266)
#define IIS2ICLX_CS  D3
#elif defined(__AVR__) || defined(ARDUINO_SAM_ZERO)
#define IIS2ICLX_CS 3
#elif (defined NRF5)
#define IIS2ICLX_CS 2
#endif
/*!
 * @brief Constructor 
 * @param cs : Chip selection pinChip selection pin
 * @param spi :SPI controller
 */
//DFRobot_IIS2ICLX_SPI iis2iclx(/*cs = */IIS2ICLX_CS,&SPI);
//DFRobot_IIS2ICLX_SPI iis2iclx(/*cs = */IIS2ICLX_CS);

void setup(void)
{
  Serial.begin(9600);
  //芯片初始化
  iis2iclx.begin();
  //芯片软复位
  iis2iclx.reset();
  /*
    加速度采集速率设置
    参数可取: IIS2ICLX_RATE_0HZ   //0hz
               IIS2ICLX_RATE_12HZ5 //12.5hz
               IIS2ICLX_RATE_26HZ  //26hz
               IIS2ICLX_RATE_52HZ  //52hz
               IIS2ICLX_RATE_104HZ //104hz
               IIS2ICLX_RATE_208HZ //208hz
               IIS2ICLX_RATE_416HZ //416hz
               IIS2ICLX_RATE_833HZ //833hz
  */
  iis2iclx.setDataRate(IIS2ICLX_RATE_416HZ);

  /*
    加速度采集量程
    参数可取:    IIS2ICLX_500_MG       /<±500mg>/
                  IIS2ICLX_1_G          /<±1g>/
                  IIS2ICLX_2_G          /<±2g>/
                  IIS2ICLX_3_G          /<±3g>/
  */
  iis2iclx.setRange(IIS2ICLX_2_G);

  /*
    滤波方式选择
    参数可取:IIS2ICLX_HPF    //滤波器选择为high-pass digital filter
              IIS2ICLX_SLOPE    //滤波器选择为slope filter
  */
  iis2iclx.setFilterPath(IIS2ICLX_SLOPE);
  
  //iis2iclx.latchInterrupt(false);
  //使能传感器中断
  iis2iclx.enableInterrupt(true);
  //设置睡眠唤醒阈值,单位为(g),数值是在量程之内
  iis2iclx.setWakeUpthreshold(0.5);
  
  /*
    选择在中断1引脚产生的中断事件
    参数可取:IIS2ICLX_WAKEUP            //wake up 事件
              IIS2ICLX_SINGLE_TAP         //单击事件
              IIS2ICLX_DOUBLE_TAP         //双击事件
              IIS2ICLX_MOTION //静止/运动检测
  */
  iis2iclx.setInt1Event(IIS2ICLX_WAKEUP);
  //iis2iclx.setInt2Event(IIS2ICLX_MOTION);
}

void loop(void)
{
  
  delay(10);
  //检测是否有wake up 事件产生
  if(iis2iclx.wakeUpDetected()){
     Serial.println("wake up detected ");
     //检测是哪个方向的运动唤醒了模块
     eWakeUpDir_t dir = iis2iclx.getWakeUpDir();
     if(dir == eDirX){
        Serial.println("IN X!");
      }
     if(dir == eDirY){
        Serial.println("IN Y!");
      }
     delay(300);
     
  }
}

结果

树莓派使用教程

准备

接线图

  • 将模块与树莓派按照连线图相连。

安装驱动

  1. 启动树莓派的I2C接口。如已开启,可跳过该步骤。
    打开终端(Terminal),键入如下指令,并回车:
sudo raspi-config 

然后用上下键选择“ 5 Interfacing Options ”, 按回车进入,选择 “ P5 I2C ”, 按回车确认“ YES ”即可。重启树莓派主控板。

  1. 安装Python依赖库与git,树莓派需要联网。如已安装,可跳过该步骤。
    在终端中,依次键入如下指令,并回车:
sudo apt-get update
sudo apt-get install build-essential python-dev python-smbus git
  1. 下载LIS系列驱动库。在终端中,依次键入如下指令,并回车:
cd Desktop
git clone https://github.com/cdjq/DFRobot_IIS

注意:
若您选择使用I2C或SPI的通信方式,需要修改demo至相应的通信,您可能会遇到没有权限修改示例程序的情况,以下是解决办法:

1.在要修改的文件目录下查询权限,命令为:

 ls -al

2.修改该文件权限,命令为:

sudo chmod a+w XXX.py

此时,所有人都对该文件具备写权限了。

样例代码

样例代码1-运动监测功能(activity_detect.py)

  • 在终端中,键入如下指令并回车,运行样例代码:
cd DFRobot_IIS/python/raspberrypi/examples
 python activity_detect.py
  • 结果

样例代码2-读取X,Y,Z轴加速度(get_acceleration.py)

  • 在终端中,键入如下指令并回车,运行样例代码:
cd DFRobot_IIS/python/raspberrypi/examples
 python get_acceleration.py
  • 结果

样例代码3-敲击监测功能(tap.py)

  • 在终端中,键入如下指令并回车,运行样例代码:
cd DFRobot_IIS/python/raspberrypi/examples
 python tap.py
  • 结果

样例代码4-敲击中断功能(interrupt.py)

  • 在终端中,键入如下指令并回车,运行样例代码:
cd DFRobot_IIS/python/raspberrypi/examples
 python interrupt.py
  • 结果

样例代码5-睡眠唤醒功能(wake_up.py)

  • 在终端中,键入如下指令并回车,运行样例代码:
cd DFRobot_IIS/python/raspberrypi/examples
 python wake_up.py
  • 结果

常见问题

还没有客户对此产品有任何问题,欢迎通过qq或者论坛联系我们!

更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖。

更多

DFshopping_car1.png DFRobot商城购买链接