SensorLib 0.5.0
Multi-platform sensor driver library for Arduino, PlatformIO, and ESP-IDF
Loading...
Searching...
No Matches
bma423_step_activity.ino
Go to the documentation of this file.
1
29#include <AccelerometerDrv.hpp>
30
31#ifndef SENSOR_SDA
32#define SENSOR_SDA 21
33#endif
34
35#ifndef SENSOR_SCL
36#define SENSOR_SCL 22
37#endif
38
39#ifndef SENSOR_IRQ
40#define SENSOR_IRQ 39
41#endif
42
44
45volatile bool isInterruptTriggered = false;
46
48{
49 Serial.print("Activity detected: ");
50 switch (activity) {
52 Serial.println("Stationary");
53 break;
55 Serial.println("Walking");
56 break;
58 Serial.println("Running");
59 break;
60 default:
61 Serial.println("Unknown");
62 break;
63 }
64}
65
66void setup()
67{
68 bool rslt;
69
70 Serial.begin(115200);
71 while (!Serial);
72
73 pinMode(SENSOR_IRQ, INPUT);
74 attachInterrupt(SENSOR_IRQ, +[]() {
76 }, RISING);
77
78 // Sensor initialization
79 rslt = accelSensor.begin(Wire, BMA4XX_I2C_ADDR_SDO_HIGH, SENSOR_SDA, SENSOR_SCL);
80 if (!rslt) {
81 while (1) {
82 Serial.println("BMA4xx sensor initialization failed");
83 delay(1000);
84 }
85 }
86
87 Serial.print(accelSensor.getModelName());
88 Serial.println(" Sensor initialized successfully");
89
90 // Set sensor orientation, based on the hardware placement setting
92 if (!rslt) {
93 Serial.println("Failed to set remap axes");
94 }
95
96 // Accelerometer configuration
97 // The desired operation mode. Allowed values are SUSPEND, NORMAL.
99 // The desired full-scale range. Allowed values are FS_2G, FS_4G, FS_8G, FS_16G.
101 // The desired bandwidth. Allowed values are OSR4_AVG1, OSR2_AVG2, NORMAL_AVG4, etc.
103 // The desired data rate in Hz. Allowed values are 0.78, 1.56, 3.12, 6.25, 12.5, 25, 50, 100, 200, 400, 800, 1600.
104 float data_rate_hz = 100.0f;
105 // The desired performance mode. Allowed values are CIC_AVG_MODE, CONTINUOUS_MODE
107
108 if (!accelSensor.configAccelerometer(operationMode, fullScaleRange, data_rate_hz, bandwidth, perfMode)) {
109 Serial.println("Failed to configure accelerometer");
110 while (1);
111 }
112
113 bool feature_enable = true; // Enable feature
114 bool interrupt_enable = true; //True: hardware interrupt enabled
116
118 pin_map, // Which pin should the hardware interrupt be routed to?
119 false, // level trigger
120 false, // active high
121 true, // output enable
122 false); // input disable
123 if (!rslt) {
124 Serial.println("Failed to set interrupt pin configuration");
125 while (1);
126 }
127
128 // Enable activity recognition feature
129 rslt = accelSensor.enableActivityRecognition(feature_enable, interrupt_enable, pin_map);
130 if (!rslt) {
131 Serial.println("Failed to enable activity recognition");
132 while (1);
133 }
134
135 // Set activity detection callback
137
138 delay(3000);
139
140 Serial.println("Now you can move the sensor.");
141}
142
143void loop()
144{
146 isInterruptTriggered = false;
148 }
149 delay(30);
150}
@license MIT License
OperationMode
Enumeration of sensor operation modes.
@ TOP_LAYER_RIGHT_CORNER
AccelFullScaleRange
Enumeration of accelerometer full-scale range settings.
InterruptPinMap
Enumeration of interrupt pin mapping options.
@ PIN1
Interrupt pin 1.
SensorActivity activity(bhy)
void setup()
#define SENSOR_SCL
volatile bool isInterruptTriggered
#define SENSOR_SDA
SensorBMA423 accelSensor
void onActivity(ActivityType activity)
#define SENSOR_IRQ
void loop()
bool begin(CommInterface interface, SensorCommCustom::CustomCallback callback, SensorCommCustomHal::CustomHalCallback hal_callback, uint8_t addr=0)
Initialize the sensor using custom callback interface.
void setOnActivityCallback(std::function< void(ActivityType)> cb)
Set the callback for activity events.
bool enableActivityRecognition(bool enable, bool interrupt_enable=false, InterruptPinMap pin_map=InterruptPinMap::PIN1) override
Enable or disable activity recognition.
void update() override
Update sensor state and process interrupts.
virtual bool setRemapAxes(SensorRemap remap)
Set the remapping of axes for the BMA4XX sensor.
bool setInterruptPinConfig(InterruptPinMap pin_map, bool edge_trigger=false, bool active_low=true, bool output_en=true, bool input_en=false)
Configure the electrical properties of an interrupt pin.
const char * getModelName() const
Get the model name of the BMA4XX sensor.
bool configAccelerometer(OperationMode mode, AccelFullScaleRange range, float data_rate_hz, AccelBandwidth bandwidth, AccelPerfMode perf_mode)
Configure the accelerometer.
AccelBandwidth
BMA4 Accelerometer averaging filter configuration These values configure the internal averaging filte...
@ OSR2_AVG2
OSR2 mode with 2 samples averaged.
ActivityType
Activity detection type.
AccelPerfMode
BMA4 Accelerometer performance mode configuration Configures the internal filter behavior for sample ...
@ CIC_AVG_MODE
Averaging filter mode: samples are averaged based on configured bandwidth and ODR.