STAR
Cal STAR — firmware, DAQ server, and engine design
Loading...
Searching...
No Matches
main.cpp
Go to the documentation of this file.
1#include "main.h"
2
3#include <Adafruit_LIS3DH.h>
4#include <Adafruit_Sensor.h>
5#include <Arduino.h>
6#include <SPI.h>
7
8static SPIClass lis_spi(FSPI);
10static volatile bool g_interrupt_flag = false;
11
12void IRAM_ATTR onInterrupt() {
13 g_interrupt_flag = true;
14}
15
16void setup() {
17 Serial.begin(115200);
18 while (!Serial)
19 delay(10);
20
21 Serial.println("LIS3DH firmware starting...");
22
25
26 if (!lis.begin()) {
27 Serial.println("ERROR: LIS3DH not found. Check wiring!");
28 while (1)
29 delay(100);
30 }
31
32 lis.setDataRate(ACCEL_ODR);
33 lis.setRange(ACCEL_RANGE);
34
35 lis.configureHighGInterrupt(INT1_THS_VALUE, INT1_DUR_VALUE);
36
38 attachInterrupt(digitalPinToInterrupt(LIS3DH_INT1_PIN), onInterrupt,
39 RISING);
40
41 Serial.println("-----------------------------------");
42 Serial.print("Range: ±");
43 switch (ACCEL_RANGE) {
45 Serial.println("2g");
46 break;
48 Serial.println("4g");
49 break;
51 Serial.println("8g");
52 break;
54 Serial.println("16g");
55 break;
56 }
57 Serial.print("INT threshold: ");
59 Serial.print("g (INT1_THS = 0x");
61 Serial.println(")");
62 Serial.print("INT duration: ");
64 Serial.print(" ODR cycles (INT1_DUR = 0x");
66 Serial.println(")");
67 Serial.print("INT1 GPIO: ");
68 Serial.println(LIS3DH_INT1_PIN);
69 Serial.println("-----------------------------------");
70 Serial.println("X_g,Y_g,Z_g");
71}
72
73void loop() {
74 if (g_interrupt_flag) {
75 g_interrupt_flag = false;
76 uint8_t src = lis.readAndClearInterrupt();
77 if (src & 0x40) { // IA bit — confirmed active interrupt
78 Serial.print("[INTERRUPT] High-G event detected! INT1_SRC=0x");
79 Serial.print(src, HEX);
80 Serial.print(" axes:");
81 if (src & 0x02)
82 Serial.print(" XH");
83 if (src & 0x08)
84 Serial.print(" YH");
85 if (src & 0x20)
86 Serial.print(" ZH");
87 Serial.println();
88 }
89 }
90
91 lis.read();
92 sensors_event_t event;
93 lis.getEvent(&event);
94
95 Serial.print(event.acceleration.x / 9.80665f, 3);
96 Serial.print(",");
97 Serial.print(event.acceleration.y / 9.80665f, 3);
98 Serial.print(",");
99 Serial.println(event.acceleration.z / 9.80665f, 3);
100
101 delay(10);
102}
This is a library for the Adafruit LIS3DH Accel breakout board.
@ LIS3DH_RANGE_16_G
@ LIS3DH_RANGE_8_G
@ LIS3DH_RANGE_2_G
@ LIS3DH_RANGE_4_G
static SerialStub Serial
Definition Arduino.h:128
#define INPUT
Definition Arduino.h:21
void pinMode(int, int)
Definition Arduino.h:46
#define HEX
Definition Arduino.h:24
#define LIS3DH_CS_PIN
Definition main.h:27
#define ACCEL_RANGE
Definition main.h:11
#define ACCEL_ODR
Definition main.h:21
#define LIS3DH_CLK_PIN
Definition main.h:30
#define INTERRUPT_DURATION_COUNTS
Definition main.h:18
#define INTERRUPT_THRESHOLD_G
Definition main.h:14
#define LIS3DH_INT1_PIN
Definition main.h:24
#define LIS3DH_MISO_PIN
Definition main.h:29
#define LIS3DH_MOSI_PIN
Definition main.h:28
Adafruit_LIS3DH lis
Definition acceldemo.ino:23
void delay(int ms)
Class that stores state and functions for interacting with Adafruit_LIS3DH.
static constexpr uint8_t INT1_THS_VALUE
Definition config.h:48
static constexpr uint8_t INT1_DUR_VALUE
Definition config.h:55
void setup()
Definition main.cpp:142
void loop()
Definition main.cpp:201
void IRAM_ATTR onInterrupt()
Definition main.cpp:12
static volatile bool g_interrupt_flag
Definition main.cpp:10
static SPIClass lis_spi(FSPI)