You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Arduino IDE中如何遍历多个类对象复用传感器初始化代码

Arduino 多BMM150传感器批量配置实现方案

核心思路是将单传感器的配置逻辑封装为通用函数,通过数组统一管理所有传感器实例后循环调用配置逻辑,无需重复复制修改代码块。

具体实现步骤

  • 提前实例化所有需要用到的BMM150传感器对象,将对象指针存入同类型数组,后续新增传感器仅需在数组中追加对应元素即可,无需修改后续配置逻辑。
  • 封装独立的传感器初始化函数,入参为传感器对象指针、传感器序号,将原先针对bmm150_1编写的初始化重试、高精度模式配置、10Hz采样率设置、XYZ轴测量开启的逻辑全部移入该函数,所有涉及原固定对象名的位置统一替换为入参对象,串口打印的传感器序号通过入参动态拼接。
  • 在setup()函数中遍历传感器数组,逐个调用初始化函数即可完成所有传感器的批量配置。后续读取传感器数据时也可直接遍历数组操作,无需逐个写对象名调用方法。

参考代码

// 引入BMM150驱动头文件(根据你实际使用的驱动库调整引入方式)
#include <BMM150.h>

// 实例化所有BMM150传感器,如果是不同I2C地址/总线可在实例化时传入对应参数
BMM150 bmm150_1;
BMM150 bmm150_2;
BMM150 bmm150_3;

// 将所有传感器对象指针存入数组,新增传感器直接在数组内追加即可
BMM150* bmmSensorList[] = {&bmm150_1, &bmm150_2, &bmm150_3};
const int SENSOR_TOTAL = sizeof(bmmSensorList) / sizeof(bmmSensorList[0]);

/**
 * @brief 单个BMM150传感器初始化配置通用函数
 * @param sensor 传感器对象指针
 * @param sensorNum 传感器序号(用于串口打印提示)
 */
void configSingleBMM150(BMM150* sensor, int sensorNum) {
  // 初始化失败自动重试
  while(sensor->begin()){
    Serial.print("bmm150_");
    Serial.print(sensorNum);
    Serial.println(" init failed, Please try again!");
    delay(1000);
  }
  Serial.print("bmm150_");
  Serial.print(sensorNum);
  Serial.println(" init success!");

  // 统一应用配置参数
  sensor->setPresetMode(BMM150_PRESETMODE_HIGHACCURACY);
  sensor->setRate(BMM150_DATA_RATE_10HZ);
  sensor->setMeasurementXYZ();
}

void setup() 
{
  Serial.begin(115200);
  while(!Serial);

  // 循环批量完成所有传感器的初始化配置
  for(int i = 0; i < SENSOR_TOTAL; i++){
    configSingleBMM150(bmmSensorList[i], i+1);
  }
}

void loop() {
  // 后续业务逻辑中读取传感器数据也可直接遍历数组操作
}

如果你使用的BMM150传感器挂载在不同I2C总线、或者配置了不同的I2C地址,仅需要在实例化对象时传入对应总线、地址参数即可,数组管理和配置函数的逻辑不需要做任何改动。

内容的提问来源于stack exchange,提问作者Fil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 15:15:17