@@ -333,6 +333,7 @@ ui_settings_t *ui;
333333#if !defined(EXCLUDE_BHI260)
334334#include < SensorBHI260AP.hpp>
335335#include < bosch/BoschSensorDataHelper.hpp>
336+ #include < Adafruit_LIS3DH.h>
336337
337338#if defined(USE_BHI260_RAM_FW)
338339#if SENSORLIB_VERSION == SENSORLIB_VERSION_VAL(0, 3, 1)
@@ -349,7 +350,10 @@ ICM_20948_I2C imu_2;
349350QMA6100P imu_3;
350351#if !defined(EXCLUDE_BHI260)
351352SensorBHI260AP imu_4;
353+ #endif /* EXCLUDE_BHI260 */
354+ Adafruit_LIS3DH imu_5;
352355
356+ #if !defined(EXCLUDE_BHI260)
353357#if SENSORLIB_VERSION == SENSORLIB_VERSION_VAL(0, 3, 1)
354358SensorXYZ bhi_accel (SensorBHI260AP::ACCEL_PASSTHROUGH , imu_4);
355359// SensorXYZ bhi_gyro(SensorBHI260AP::GYRO_PASSTHROUGH, imu_4);
@@ -1155,7 +1159,8 @@ static void nRF52_setup()
11551159 }
11561160 }
11571161 }
1158- } else if (nRF52_board == NRF52_ELECROW_TN_M3 ) {
1162+ } else if (nRF52_board == NRF52_ELECROW_TN_M3 ||
1163+ nRF52_board == NRF52_ELECROW_TN_M8 ) {
11591164 Wire.beginTransmission (SC7A20H_ADDRESS_H );
11601165 nRF52_has_imu = (Wire.endTransmission () == 0 );
11611166 }
@@ -1861,9 +1866,15 @@ static void nRF52_setup()
18611866 break ;
18621867
18631868 case NRF52_ELECROW_TN_M3 :
1864- /* TBD */
1865- hw_info.imu = ACC_SC7A20H ;
1866- IMU_Time_Marker = millis ();
1869+ case NRF52_ELECROW_TN_M8 :
1870+ Wire.begin ();
1871+ imu_5 = Adafruit_LIS3DH (&Wire);
1872+ if (imu_5.begin (SC7A20H_ADDRESS_H , 0x11 )) {
1873+ imu_5.setRange (LIS3DH_RANGE_4_G );
1874+
1875+ hw_info.imu = ACC_SC7A20H ;
1876+ IMU_Time_Marker = millis ();
1877+ }
18671878 break ;
18681879
18691880 case NRF52_LILYGO_TIMPULSE_PLUS :
@@ -2561,54 +2572,68 @@ static void nRF52_loop()
25612572#endif /* USE_WEBUSB_SETTINGS */
25622573
25632574#if !defined(EXCLUDE_IMU)
2564- if (hw_info.imu == IMU_MPU9250 &&
2565- (millis () - IMU_Time_Marker) > IMU_UPDATE_INTERVAL ) {
2566- if (imu_1.update ()) {
2567- float a_x = imu_1.getAccX ();
2568- float a_y = imu_1.getAccY ();
2569- float a_z = imu_1.getAccZ ();
2570-
2571- IMU_g = sqrtf (a_x*a_x + a_y*a_y + a_z*a_z);
2572- }
2573- IMU_Time_Marker = millis ();
2574- }
2575+ if ((millis () - IMU_Time_Marker) > IMU_UPDATE_INTERVAL ) {
2576+ float a_x = 0 ;
2577+ float a_y = 0 ;
2578+ float a_z = 0 ;
25752579
2576- if (hw_info.imu == IMU_ICM20948 &&
2577- (millis () - IMU_Time_Marker) > IMU_UPDATE_INTERVAL ) {
2578- if (imu_2.dataReady ()) {
2579- imu_2.getAGMT ();
2580+ switch (hw_info.imu )
2581+ {
2582+ case IMU_MPU9250 :
2583+ if (imu_1.update ()) {
2584+ a_x = imu_1.getAccX ();
2585+ a_y = imu_1.getAccY ();
2586+ a_z = imu_1.getAccZ ();
2587+ }
2588+ break ;
25802589
2581- // milli g's
2582- float a_x = imu_2.accX ();
2583- float a_y = imu_2.accY ();
2584- float a_z = imu_2.accZ ();
2585- #if 0
2586- Serial.print("{ACCEL: ");
2587- Serial.print(a_x);
2588- Serial.print(",");
2589- Serial.print(a_y);
2590- Serial.print(",");
2591- Serial.print(a_z);
2592- Serial.println("}");
2593- #endif
2594- IMU_g = sqrtf (a_x*a_x + a_y*a_y + a_z*a_z) / 1000 ;
2595- #if defined(USE_OLED)
2596- IMU_g_x10 = (int32_t ) (IMU_g * 10 );
2597- #endif /* USE_OLED */
2598- }
2599- IMU_Time_Marker = millis ();
2600- }
2590+ case IMU_ICM20948 :
2591+ if (imu_2.dataReady ()) {
2592+ imu_2.getAGMT ();
2593+
2594+ // milli g's
2595+ a_x = imu_2.accX () / 1000 ;
2596+ a_y = imu_2.accY () / 1000 ;
2597+ a_z = imu_2.accZ () / 1000 ;
2598+ }
2599+ break ;
2600+
2601+ case ACC_QMA6100P :
2602+ {
2603+ outputData data;
26012604
2602- if (hw_info.imu == ACC_QMA6100P &&
2603- (millis () - IMU_Time_Marker) > IMU_UPDATE_INTERVAL ) {
2604- outputData data;
2605+ imu_3.getAccelData (&data);
2606+ imu_3.offsetValues (data.xData , data.yData , data.zData );
26052607
2606- imu_3.getAccelData (&data);
2607- imu_3.offsetValues (data.xData , data.yData , data.zData );
2608+ a_x = data.xData ;
2609+ a_y = data.yData ;
2610+ a_z = data.zData ;
2611+ }
2612+ break ;
2613+
2614+ #if 0 /* TODO */ // !defined(EXCLUDE_BHI260)
2615+ case IMU_BHI260AP:
2616+ imu_4.update();
2617+
2618+ if (bhi_accel.hasUpdated()) {
2619+ a_x = bhi_accel.getX(); /* TBD */
2620+ a_y = bhi_accel.getY(); /* TBD */
2621+ a_z = bhi_accel.getZ(); /* TBD */
2622+ }
2623+ break;
2624+ #endif /* EXCLUDE_BHI260 */
2625+
2626+ case ACC_SC7A20H :
2627+ imu_5.read ();
2628+ a_x = imu_5.x_g ;
2629+ a_y = imu_5.y_g ;
2630+ a_z = imu_5.z_g ;
2631+ break ;
2632+
2633+ default :
2634+ break ;
2635+ }
26082636
2609- float a_x = data.xData ;
2610- float a_y = data.yData ;
2611- float a_z = data.zData ;
26122637#if 0
26132638 Serial.print("{ACCEL: ");
26142639 Serial.print(a_x);
@@ -2618,35 +2643,21 @@ static void nRF52_loop()
26182643 Serial.print(a_z);
26192644 Serial.println("}");
26202645#endif
2646+
26212647 IMU_g = sqrtf (a_x*a_x + a_y*a_y + a_z*a_z);
2622- IMU_Time_Marker = millis ();
2623- }
26242648
2625- #if 0 /* TODO */ // !defined(EXCLUDE_BHI260)
2626- if (hw_info.imu == IMU_BHI260AP &&
2627- (millis() - IMU_Time_Marker) > (IMU_UPDATE_INTERVAL / 10)) {
2628- // Update sensor fifo
2629- imu_4.update();
2630-
2631- if (bhi_accel.hasUpdated()) {
2632- float a_x = bhi_accel.getX();
2633- float a_y = bhi_accel.getY();
2634- float a_z = bhi_accel.getZ();
26352649#if 0
2636- Serial.print("{ACCEL: ");
2637- Serial.print(a_x);
2638- Serial.print(",");
2639- Serial.print(a_y);
2640- Serial.print(",");
2641- Serial.print(a_z);
2642- Serial.println("}");
2650+ Serial.print("G load: ");
2651+ Serial.print(IMU_g);
2652+ Serial.println();
26432653#endif
2644- IMU_g = sqrtf(a_x*a_x + a_y*a_y + a_z*a_z); /* TBD */
2645- }
2654+
2655+ #if defined(USE_OLED)
2656+ IMU_g_x10 = (int32_t ) (IMU_g * 10 );
2657+ #endif /* USE_OLED */
26462658
26472659 IMU_Time_Marker = millis ();
26482660 }
2649- #endif /* EXCLUDE_BHI260 */
26502661#endif /* EXCLUDE_IMU */
26512662
26522663 if ((nRF52_board == NRF52_SEEED_T1000E ||
@@ -2689,25 +2700,29 @@ static void nRF52_fini(int reason)
26892700#endif /* ARDUINO_ARCH_MBED */
26902701
26912702#if !defined(EXCLUDE_IMU)
2692- if (hw_info.imu == IMU_MPU9250 ) {
2693- imu_1.sleep (true );
2694- }
2695-
2696- if (hw_info.imu == IMU_ICM20948 ) {
2697- imu_2.sleep (true );
2698- // imu_2.lowPower(true);
2699- }
2700-
2701- if (hw_info.imu == ACC_QMA6100P ) {
2702- imu_3.enableAccel (false );
2703- }
2704-
2705- #if !defined(EXCLUDE_BHI260)
2706- if (hw_info.imu == IMU_BHI260AP ) {
2707- /* TBD */
2708- // imu_4.deinit();
2709- }
2703+ switch (hw_info.imu )
2704+ {
2705+ case IMU_MPU9250 :
2706+ imu_1.sleep (true );
2707+ break ;
2708+ case IMU_ICM20948 :
2709+ imu_2.sleep (true );
2710+ break ;
2711+ case ACC_QMA6100P :
2712+ imu_3.enableAccel (false );
2713+ break ;
2714+ #if 0 /* TODO */ // !defined(EXCLUDE_BHI260)
2715+ case IMU_BHI260AP:
2716+ /* TBD */
2717+ // imu_4.deinit();
2718+ break;
27102719#endif /* EXCLUDE_BHI260 */
2720+ case ACC_SC7A20H :
2721+ /* TBD */
2722+ break ;
2723+ default :
2724+ break ;
2725+ }
27112726#endif /* EXCLUDE_IMU */
27122727
27132728 switch (nRF52_board)
0 commit comments