Lower IMU reporting frequency
This commit is contained in:
+18
-26
@@ -211,6 +211,9 @@ const unsigned long TELEMETRY_MS = 1000;
|
|||||||
const unsigned long HEARTBEAT_MS = 2000;
|
const unsigned long HEARTBEAT_MS = 2000;
|
||||||
const int HEARTBEAT_DUR = 30;
|
const int HEARTBEAT_DUR = 30;
|
||||||
const unsigned long BOOT_SAFE_MS = 5000;
|
const unsigned long BOOT_SAFE_MS = 5000;
|
||||||
|
#ifdef FEATURE_IMU_STREAM
|
||||||
|
const unsigned long IMU_STREAM_RATE_MS = 50; // 20 Hz max — 100 Hz overwhelms BLE conn interval
|
||||||
|
#endif
|
||||||
const float BATT_FULL = 4.20f;
|
const float BATT_FULL = 4.20f;
|
||||||
const float BATT_EMPTY = 3.00f;
|
const float BATT_EMPTY = 3.00f;
|
||||||
const float BATT_CRITICAL = 3.10f;
|
const float BATT_CRITICAL = 3.10f;
|
||||||
@@ -259,6 +262,9 @@ unsigned long lastBattTime = 0;
|
|||||||
unsigned long lastHeartbeat = 0;
|
unsigned long lastHeartbeat = 0;
|
||||||
unsigned long lastTelemetry = 0;
|
unsigned long lastTelemetry = 0;
|
||||||
unsigned long bootStartMs = 0;
|
unsigned long bootStartMs = 0;
|
||||||
|
#ifdef FEATURE_IMU_STREAM
|
||||||
|
unsigned long lastImuStream = 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef FEATURE_TELEMETRY
|
#ifdef FEATURE_TELEMETRY
|
||||||
uint16_t statRecalCount = 0;
|
uint16_t statRecalCount = 0;
|
||||||
@@ -601,7 +607,7 @@ void setup() {
|
|||||||
Bluefruit.begin(1, 0);
|
Bluefruit.begin(1, 0);
|
||||||
Bluefruit.setTxPower(4);
|
Bluefruit.setTxPower(4);
|
||||||
Bluefruit.setName(safeMode ? "IMU Mouse (safe)" : "IMU Mouse");
|
Bluefruit.setName(safeMode ? "IMU Mouse (safe)" : "IMU Mouse");
|
||||||
Bluefruit.Periph.setConnInterval(6, 12);
|
Bluefruit.Periph.setConnInterval(12, 24); // 15-30ms — less aggressive, prevents stream disconnect
|
||||||
|
|
||||||
Wire1.begin(); // LSM6DS3 is on internal I2C bus (Wire1), must init before imu.begin()
|
Wire1.begin(); // LSM6DS3 is on internal I2C bus (Wire1), must init before imu.begin()
|
||||||
if (imu.begin() != 0) {
|
if (imu.begin() != 0) {
|
||||||
@@ -643,30 +649,14 @@ void setup() {
|
|||||||
|
|
||||||
startAdvertising();
|
startAdvertising();
|
||||||
Serial.print("[OK] Advertising — features:");
|
Serial.print("[OK] Advertising — features:");
|
||||||
#ifdef FEATURE_CONFIG_SERVICE
|
#ifdef FEATURE_CONFIG_SERVICE Serial.print(" CFG"); #endif
|
||||||
Serial.print(" CFG");
|
#ifdef FEATURE_TELEMETRY Serial.print(" TELEM"); #endif
|
||||||
#endif
|
#ifdef FEATURE_IMU_STREAM Serial.print(" STREAM"); #endif
|
||||||
#ifdef FEATURE_TELEMETRY
|
#ifdef FEATURE_TAP_DETECTION Serial.print(" TAP"); #endif
|
||||||
Serial.print(" TELEM");
|
#ifdef FEATURE_TEMP_COMPENSATION Serial.print(" TEMPCOMP"); #endif
|
||||||
#endif
|
#ifdef FEATURE_AUTO_RECAL Serial.print(" AUTORECAL"); #endif
|
||||||
#ifdef FEATURE_IMU_STREAM
|
#ifdef FEATURE_BATTERY_MONITOR Serial.print(" BATT"); #endif
|
||||||
Serial.print(" STREAM");
|
#ifdef FEATURE_BOOT_LOOP_DETECT Serial.print(" BOOTDET"); #endif
|
||||||
#endif
|
|
||||||
#ifdef FEATURE_TAP_DETECTION
|
|
||||||
Serial.print(" TAP");
|
|
||||||
#endif
|
|
||||||
#ifdef FEATURE_TEMP_COMPENSATION
|
|
||||||
Serial.print(" TEMPCOMP");
|
|
||||||
#endif
|
|
||||||
#ifdef FEATURE_AUTO_RECAL
|
|
||||||
Serial.print(" AUTORECAL");
|
|
||||||
#endif
|
|
||||||
#ifdef FEATURE_BATTERY_MONITOR
|
|
||||||
Serial.print(" BATT");
|
|
||||||
#endif
|
|
||||||
#ifdef FEATURE_BOOT_LOOP_DETECT
|
|
||||||
Serial.print(" BOOTDET");
|
|
||||||
#endif
|
|
||||||
Serial.println();
|
Serial.println();
|
||||||
|
|
||||||
bootStartMs = millis();
|
bootStartMs = millis();
|
||||||
@@ -771,7 +761,9 @@ void loop() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef FEATURE_IMU_STREAM
|
#ifdef FEATURE_IMU_STREAM
|
||||||
if (!safeMode && imuStreamEnabled && Bluefruit.connected()) {
|
if (!safeMode && imuStreamEnabled && Bluefruit.connected()
|
||||||
|
&& (now - lastImuStream >= IMU_STREAM_RATE_MS)) {
|
||||||
|
lastImuStream = now;
|
||||||
ImuPacket pkt;
|
ImuPacket pkt;
|
||||||
pkt.gyroY_mDPS = (int16_t)constrain(gy*(180.f/PI)*1000.f, -32000, 32000);
|
pkt.gyroY_mDPS = (int16_t)constrain(gy*(180.f/PI)*1000.f, -32000, 32000);
|
||||||
pkt.gyroZ_mDPS = (int16_t)constrain(gz*(180.f/PI)*1000.f, -32000, 32000);
|
pkt.gyroZ_mDPS = (int16_t)constrain(gz*(180.f/PI)*1000.f, -32000, 32000);
|
||||||
|
|||||||
Reference in New Issue
Block a user