51#if !defined(USE_I2C_INTERFACE) && !defined(USE_SPI_INTERFACE)
52#define USE_I2C_INTERFACE
53#warning "No interface type is selected, use I2C interface"
56#if defined(USE_SPI_INTERFACE)
99#ifdef ARDUINO_T_BEAM_S3_SUPREME
100#include <XPowersAXP2101.tpp>
105#if defined(ARDUINO_T_BEAM_S3_SUPREME)
106 XPowersAXP2101 power;
107 power.
begin(Wire1, AXP2101_SLAVE_ADDRESS, 42, 41);
108 power.disableALDO1();
109 power.disableALDO2();
111 power.setALDO1Voltage(3300); power.enableALDO1();
112 power.setALDO2Voltage(3300); power.enableALDO2();
119 Serial.println(
"[PEDOMETER] Step detected!");
122 serialPrintFmt(
"[PEDOMETER] Steps: %u\n", steps);
127static void serialPrintFmt(
const char *fmt, ...)
132 vsnprintf(
buf,
sizeof(
buf), fmt, args);
139 Serial.begin(115200);
144 Serial.println(
"QMI8658 Pedometer Example");
146#ifdef USE_I2C_INTERFACE
148 Serial.println(
"Failed to initialize QMI8658!");
155#ifdef USE_SPI_INTERFACE
158 Serial.println(
"Failed to initialize QMI8658!");
181 Serial.println(
"\nUsing pedometer debug profile (easier trigger than strict walking profile)");
187 serialPrintFmt(
"configPedometer: %s\n", cfg_ok ?
"OK" :
"FAIL");
191 serialPrintFmt(
"enablePedometer: %s\n", ped_ok ?
"OK" :
"FAIL");
193 Serial.println(
"\nRegister snapshot after pedometer setup:");
198 Serial.println(
"\nPedometer configured. Start walking!");
199 Serial.println(
"Tip: step engine is for periodic gait, not random shaking.");
200 Serial.println(
"For handheld debug: simulate walking cadence (1-2Hz up/down motion).\n");
201 Serial.println(
"Note: Pedometer callback is triggered by step-count change, not only by status bit.");
203 int irq = digitalPinToInterrupt(
IMU_IRQ);
205 attachInterrupt(irq, +[]() {
208 serialPrintFmt(
"IRQ attached on pin %d (CHANGE trigger)\n",
IMU_IRQ);
210 serialPrintFmt(
"IRQ pin %d has no interrupt mapping, polling only\n",
IMU_IRQ);
221 bool doUpdate =
false;
227 uint32_t now = millis();
bool begin(CommInterface interface, SensorCommCustom::CustomCallback callback, SensorCommCustomHal::CustomHalCallback hal_callback, uint8_t addr=0)
Initialize the sensor using custom callback interface.
QMI8658 IMU sensor driver class.
bool configGyro(GyroFullScaleRange range, float data_rate_hz, LpfMode lpf=LpfMode::MODE_0)
Configure the gyroscope with specified parameters.
bool configPedometer(uint16_t sample_count, uint16_t peak_to_peak, uint16_t peak_threshold, uint16_t time_up, uint8_t time_low=20, uint8_t entry_count=10, uint8_t fix_precision=0, uint8_t sig_count=4)
Configure pedometer parameters.
uint32_t getStepCount()
Get pedometer step count.
bool enableAccel() override
Enable the accelerometer.
bool enablePedometer(IntPin pin=IntPin::DISABLE)
Enable pedometer.
bool enableGyro() override
Enable the gyroscope.
void setPedometerCallback(MotionCallback callback)
Set callback for pedometer event.
void dumpRegisters()
Dump control registers for debugging.
bool resetStepCount()
Reset pedometer counter.
bool configAccel(AccelFullScaleRange range, float data_rate_hz, LpfMode lpf=LpfMode::MODE_0)
Configure the accelerometer with specified parameters.
uint16_t update()
Update sensor status and process events.
void setPins(int pin)
Set interrupt pin.
constexpr uint32_t kPollIntervalMs
__attribute__((weak)) void setupPower()
volatile bool isInterruptTriggered