#pragma once #include <Arduino.h> #include <Wire.h> // Sparrow wiring / addresses #define LSM6DSL_I2C_ADDR 0x6A #define LSM6DSL_SDA_PIN 21 // GPIO21 on Sparrow #define LSM6DSL_SCL_PIN 22 // GPIO22 on Sparrow // LSM6DSL registers we care about #define LSM6DSL_CTRL1_XL 0x10 // accel config #define LSM6DSL_CTRL2_G 0x11 // gyro config #define LSM6DSL_CTRL3_C 0x12 // IF_INC, BDU, etc. #define LSM6DSL_OUTX_L_XL 0x28 // accel data start (X_L, X_H, Y_L, Y_H, Z_L, Z_H) // Sensitivity: ±2g -> 0.061 mg/LSB = 0.000061 g/LSB #define LSM6DSL_ACC_SENS_2G_G_PER_LSB (0.061f / 1000.0f) class LSM6DSL { public: bool begin(); bool readAccelG(float &ax_g, float &ay_g, float &az_g); private: bool writeReg(uint8_t reg, uint8_t value); bool readBytes(uint8_t startReg, uint8_t *buffer, size_t len); };