SensorLib 0.5.0
Multi-platform sensor driver library for Arduino, PlatformIO, and ESP-IDF
Loading...
Searching...
No Matches
bma456h_tap.ino
Go to the documentation of this file.
1
30#include <AccelerometerDrv.hpp>
31
32#ifndef SENSOR_SDA
33#define SENSOR_SDA 21
34#endif
35
36#ifndef SENSOR_SCL
37#define SENSOR_SCL 22
38#endif
39
40#ifndef SENSOR_IRQ
41#define SENSOR_IRQ 39
42#endif
43
44// Configuring using BMA456H features
46
47volatile bool isInterruptTriggered = false;
48
50{
51 Serial.print("Tap detected: ");
52 switch (tap) {
54 Serial.println("Single Tap");
55 break;
57 Serial.println("Double Tap");
58 break;
60 Serial.println("Triple Tap");
61 break;
62 default:
63 Serial.println("No Tap");
64 break;
65 }
66}
67
68void setup()
69{
70 bool rslt;
71
72 Serial.begin(115200);
73 while (!Serial);
74
75 pinMode(SENSOR_IRQ, INPUT);
76 attachInterrupt(SENSOR_IRQ, +[]() {
78 }, RISING);
79
80 // Sensor initialization
81 rslt = accelSensor.begin(Wire, BMA4XX_I2C_ADDR_SDO_HIGH, SENSOR_SDA, SENSOR_SCL);
82 if (!rslt) {
83 while (1) {
84 Serial.println("BMA4xx sensor initialization failed");
85 delay(1000);
86 }
87 }
88
89 Serial.print(accelSensor.getModelName());
90 Serial.println(" Sensor initialized successfully");
91
92 // Set sensor orientation, based on the hardware placement setting
94 if (!rslt) {
95 Serial.println("Failed to set remap axes");
96 }
97
98 // Accelerometer configuration
99 // The desired operation mode. Allowed values are SUSPEND, NORMAL.
100 OperationMode operationMode = OperationMode::NORMAL;
101 // The desired full-scale range. Allowed values are FS_2G, FS_4G, FS_8G, FS_16G.
103 // The desired bandwidth. Allowed values are OSR4_AVG1, OSR2_AVG2, NORMAL_AVG4, etc.
105 // 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.
106 float data_rate_hz = 200.0f; // A minimum sampling frequency of 200Hz is required for tapping.
107 // The desired performance mode. Allowed values are CIC_AVG_MODE, CONTINUOUS_MODE
109
110 if (!accelSensor.configAccelerometer(operationMode, fullScaleRange, data_rate_hz, bandwidth, perfMode)) {
111 Serial.println("Failed to configure accelerometer");
112 while (1);
113 }
114
115 bool feature_enable = true; // Enable feature
116 bool interrupt_enable = true; //True: hardware interrupt enabled
118
120 pin_map, // Which pin should the hardware interrupt be routed to?
121 false, // level trigger
122 false, // active high
123 true, // output enable
124 false); // input disable
125 if (!rslt) {
126 Serial.println("Failed to set interrupt pin configuration");
127 while (1);
128 }
129
130 // Enable tap detector feature
131 rslt = accelSensor.enableTapDetector(feature_enable, interrupt_enable, pin_map);
132 if (!rslt) {
133 Serial.println("Failed to enable tap detector");
134 while (1);
135 }
136
137 // Set tap detection callback
139
140 delay(3000);
141
142 Serial.println("Now you can tap once, twice, or three times.");
143}
144
145void loop()
146{
148 isInterruptTriggered = false;
150 }
151 delay(30);
152}
@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.
SensorBMA456H accelSensor
void setup()
void onTapDetected(TapType tap)
#define SENSOR_SCL
volatile bool isInterruptTriggered
#define SENSOR_SDA
#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 setOnTapCallback(std::function< void(TapType)> cb)
Set the callback for tap events.
bool enableTapDetector(bool enable, bool interrupt_enable=false, InterruptPinMap pin_map=InterruptPinMap::PIN1) override
Enable or disable tap detection.
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.
TapType
Tap 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.