【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 
  实验二百三十三:ESP32-S3 UNO开发板 双核16M+8M+Wi-Fi+蓝牙5.0+45个GPIO 
  {花雕动手做}项目之十一:测试ESP32-S3 UNO使用ADXL345_WE 库的活动/非活动中断功能 
 
实验开源代码 
 
			
			
			- /*
 -   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
 -   实验二百三十三:ESP32-S3 UNO开发板 双核16M+8M+Wi-Fi+蓝牙5.0+45个GPIO
 -   {花雕动手做}项目之十一:ESP32-S3 UNO使用ADXL345_WE 库的活动/非活动中断功能
 - */
 - 
 - #include<Wire.h>
 - #include<ADXL345_WE.h>
 - 
 - #define ADXL345_I2CADDR 0x53 // 如果 SDO = HIGH,则为 0x1D
 - const int int2Pin = 2;
 - volatile bool in_activity = false; // 活动或不活动中断发生
 - 
 - /* 有几种方法可以创建您的 ADXL345 对象:
 -    ADXL345_WE myAcc = ADXL345_WE()                -> uses Wire / I2C Address = 0x53
 -    ADXL345_WE myAcc = ADXL345_WE(ADXL345_I2CADDR) -> uses Wire / ADXL345_I2CADDR
 -    ADXL345_WE myAcc = ADXL345_WE(&wire2)          -> uses the TwoWire object wire2 / ADXL345_I2CADDR
 -    ADXL345_WE myAcc = ADXL345_WE(&wire2, ADXL345_I2CADDR) -> all together
 - */
 - 
 - ADXL345_WE myAcc = ADXL345_WE(ADXL345_I2CADDR);
 - 
 - void setup() {
 -   Serial.begin(115200);  // 初始化串口通信,波特率为115200
 -   Wire.begin(4, 5);  // 初始化I2C总线,设置SDA为GPIO4,SCL为GPIO5
 -   pinMode(int2Pin, INPUT);
 -   Serial.println("ADXL345 - 活动和不活动中断");
 -   Serial.println();
 -   if (!myAcc.init()) {
 -     Serial.println("ADXL345 未连接!");
 -   }
 - 
 -   /* 插入来自 ADXL345_calibration.ino 的数据并取消注释以获得更精确的结果*/
 -   // myAcc.setCorrFactors(-266.0, 285.0, -268.0, 278.0, -291.0, 214.0);
 - 
 -   /* Choose the data rate         Hz
 -       ADXL345_DATA_RATE_3200    3200
 -       ADXL345_DATA_RATE_1600    1600
 -       ADXL345_DATA_RATE_800      800
 -       ADXL345_DATA_RATE_400      400
 -       ADXL345_DATA_RATE_200      200
 -       ADXL345_DATA_RATE_100      100
 -       ADXL345_DATA_RATE_50        50
 -       ADXL345_DATA_RATE_25        25
 -       ADXL345_DATA_RATE_12_5      12.5
 -       ADXL345_DATA_RATE_6_25       6.25
 -       ADXL345_DATA_RATE_3_13       3.13
 -       ADXL345_DATA_RATE_1_56       1.56
 -       ADXL345_DATA_RATE_0_78       0.78
 -       ADXL345_DATA_RATE_0_39       0.39
 -       ADXL345_DATA_RATE_0_20       0.20
 -       ADXL345_DATA_RATE_0_10       0.10
 -   */
 -   myAcc.setDataRate(ADXL345_DATA_RATE_25);
 -   Serial.print("数据速率:");
 -   Serial.print(myAcc.getDataRateAsString());
 - 
 -   /* 选择测量范围
 -       ADXL345_RANGE_16G    16g
 -       ADXL345_RANGE_8G      8g
 -       ADXL345_RANGE_4G      4g
 -       ADXL345_RANGE_2G      2g
 -   */
 -   myAcc.setRange(ADXL345_RANGE_4G);
 -   Serial.print(" /g 范围: ");
 -   Serial.println(myAcc.getRangeAsString());
 -   Serial.println();
 - 
 -   attachInterrupt(digitalPinToInterrupt(int2Pin), in_activityISR, RISING);
 - 
 -   /* 必须为活动设置三个参数:
 -       1.直流/交流模式:
 -           ADXL345_DC_MODE - 阈值是定义的(参数 3)
 -           ADXL345_AC_MODE - 阈值 = 启动加速度 + 定义的阈值
 -      2. 轴,考虑:
 -           ADXL345_000  -  没有轴(没有意义)
 -           ADXL345_00Z  -  z
 -           ADXL345_0Y0  -  y
 -           ADXL345_0YZ  -  y,z
 -           ADXL345_X00  -  x
 -           ADXL345_X0Z  -  x,z
 -           ADXL345_XY0  -  x,y
 -           ADXL345_XYZ  -  所有轴
 -      3. 以 g 为单位的阈值
 -   */
 - 
 -   myAcc.setActivityParameters(ADXL345_DC_MODE, ADXL345_XY0, 0.5);
 - 
 -   /* 在活动中必须设置四个参数:
 -     1.直流/交流模式:
 -         见活动参数
 -     2. 轴,考虑:
 -         见活动参数
 -     3. 以 g 为单位的阈值
 -     4. 以秒为单位的不活动时间阈值(最大 255)
 -   */
 - 
 -   myAcc.setInactivityParameters(ADXL345_DC_MODE, ADXL345_XY0, 0.5, 10.0);
 - 
 -   /* 仅当同时使用活动和不活动时,设置链接位才有意义
 -     如果未设置链接位:
 -     - 活动中断可以随时多次触发
 -     - 如果不活动参数可以触发不活动。满足,独立于活动参数。 (如果使用)
 -     如果设置了链接位:
 -     - 活动中断只能在非活动中断后触发
 -     - 在下一个非活动中断发生之前,只能触发一个活动中断
 -   */
 -   // myAcc.setLinkBit(true);
 - 
 -   /* 你可以选择以下中断:
 -      变量名:触发,如果:
 -     ADXL345_OVERRUN - 新数据替换未读数据
 -     ADXL345_WATERMARK - FIFO 中的样本数量等于 FIFO_CTL 中定义的数量
 -     ADXL345_FREEFALL - 所有轴的加速度值都低于 THRESH_FF 中定义的阈值
 -     ADXL345_INACTIVITY - 符合。所有包含轴的值是 < THRESH_INACT for period > TIME_INACT
 -     ADXL345_ACTIVITY - 符合。包含轴的值 > THRESH_ACT
 -     ADXL345_DOUBLE_TAP - 在一个(包括)上检测到双击。轴和各种定义的条件得到满足
 -     ADXL345_SINGLE_TAP - 在一个上检测到单击,包括。轴和各种定义的条件得到满足
 -     ADXL345_DATA_READY - 新数据可用
 - 
 -     将中断分配给 INT1 (INT_PIN_1) 或 INT2 (INT_PIN_2)。数据就绪,溢出
 -     始终启用。您只能更改这些默认情况下为 INT1 的分配。
 - 
 -     您可以使用 deleteInterrupt(type) 删除中断;
 -   */
 - 
 -   myAcc.setInterrupt(ADXL345_ACTIVITY, INT_PIN_2);
 -   myAcc.setInterrupt(ADXL345_INACTIVITY, INT_PIN_2);
 - 
 - }
 - 
 - /*  在主循环中进行了一些检查:
 -     getActTapStatus() 以字节形式返回负责活动中断的轴(库中的代码)
 -     getActTapStatusAsString() 以字符串形式返回导致中断的轴
 -     readAndClearInterrupts(); 将中断类型返回为字节(库中的代码)
 -     checkInterrupt(intSource, type) 如果 intSource 的类型为 bool,则返回
 - */
 - 
 - void loop() {
 -   if ((millis() % 1000) == 1) {
 -     xyzFloat g = myAcc.getGValues();
 -     Serial.print("g-x   = ");
 -     Serial.print(g.x);
 -     Serial.print("  |  g-y   = ");
 -     Serial.print(g.y);
 -     Serial.print("  |  g-z   = ");
 -     Serial.println(g.z);
 -   }
 - 
 -   if (in_activity == true) {
 -     //byte actTapSource = myAcc.getActTapStatus();
 -     //Serial.println(actTapSource, BIN);
 -     String axes = myAcc.getActTapStatusAsString();
 -     byte intSource = myAcc.readAndClearInterrupts();
 -     if (myAcc.checkInterrupt(intSource, ADXL345_ACTIVITY)) {
 -       Serial.print("活动在: ");
 -       Serial.println(axes);
 -     }
 - 
 -     if (myAcc.checkInterrupt(intSource, ADXL345_INACTIVITY)) {
 -       Serial.println("不活动!");
 -     }
 - 
 -     delay(500);
 -     myAcc.readAndClearInterrupts();
 -     in_activity = false;
 -   }
 - }
 - 
 - void in_activityISR() {
 -   in_activity = true;
 - }
 
  复制代码
  
 
 
 |