SensorLib 0.5.0
Multi-platform sensor driver library for Arduino, PlatformIO, and ESP-IDF
Loading...
Searching...
No Matches
bma423_data_ready_interrupt.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("Data ready: ");
50 Serial.print("Temperature: ");
51 Serial.print(data.temperature);
52 Serial.print(" °C, Acc_Raw: (");
53 Serial.print(data.raw.x);
54 Serial.print(", ");
55 Serial.print(data.raw.y);
56 Serial.print(", ");
57 Serial.print(data.raw.z);
58 Serial.print("), Acc_mps2: (");
59 Serial.print(data.mps2.x);
60 Serial.print(", ");
61 Serial.print(data.mps2.y);
62 Serial.print(", ");
63 Serial.print(data.mps2.z);
64 Serial.println(")");
65}
66
67void setup()
68{
69 bool rslt;
70
71 Serial.begin(115200);
72 while (!Serial);
73
74 pinMode(SENSOR_IRQ, INPUT);
75 attachInterrupt(SENSOR_IRQ, +[]() {
77 }, RISING);
78
79 // Sensor initialization
80 rslt = accelSensor.begin(Wire, BMA4XX_I2C_ADDR_SDO_HIGH, SENSOR_SDA, SENSOR_SCL);
81 if (!rslt) {
82 while (1) {
83 Serial.println("BMA4xx sensor initialization failed");
84 delay(1000);
85 }
86 }
87
88 Serial.print(accelSensor.getModelName());
89 Serial.println(" Sensor initialized successfully");
90
91 // Set sensor orientation, based on the hardware placement setting
93 if (!rslt) {
94 Serial.println("Failed to set remap axes");
95 }
96
97 // Accelerometer configuration
98 // The desired operation mode. Allowed values are SUSPEND, NORMAL.
100 // The desired full-scale range. Allowed values are FS_2G, FS_4G, FS_8G, FS_16G.
102 // The desired bandwidth. Allowed values are OSR4_AVG1, OSR2_AVG2, NORMAL_AVG4, etc.
104 // 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.
105 float data_rate_hz = 100.0f;
106 // The desired performance mode. Allowed values are CIC_AVG_MODE, CONTINUOUS_MODE
108
109 if (!accelSensor.configAccelerometer(operationMode, fullScaleRange, data_rate_hz, bandwidth, perfMode)) {
110 Serial.println("Failed to configure accelerometer");
111 while (1);
112 }
113
114 bool feature_enable = true; // Enable feature
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 data ready feature
129 rslt = accelSensor.enableDataReady(feature_enable, pin_map);
130 if (!rslt) {
131 Serial.println("Failed to enable data ready");
132 while (1);
133 }
134
135 // Set data ready 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.
volatile bool isInterruptTriggered
SensorBMA423 accelSensor
void onDataReady(AccelerometerData data)
bool begin(CommInterface interface, SensorCommCustom::CustomCallback callback, SensorCommCustomHal::CustomHalCallback hal_callback, uint8_t addr=0)
Initialize the sensor using custom callback interface.
void setOnDataReadyCallback(std::function< void(AccelerometerData)> cb)
Set the callback for data ready events.
bool enableDataReady(bool enable=true, InterruptPinMap pin_map=InterruptPinMap::PIN1) override
Enable data ready interrupt.
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.
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.
Structure representing accelerometer data.
SensorVector mps2
Acceleration in meters per second squared (m/s²)
float temperature
Temperature in degrees Celsius (if available)
RawVector raw
Raw sensor values in LSB (least significant bits)
int16_t x
X-axis raw value.
int16_t y
Y-axis raw value.
int16_t z
Z-axis raw value.
float x
X-axis component.
float y
Y-axis component.
float z
Z-axis component.