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
相关产品推荐
相关产品推荐

