-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathExample06_DistanceBasicReadings.ino
More file actions
147 lines (127 loc) · 4.02 KB
/
Example06_DistanceBasicReadings.ino
File metadata and controls
147 lines (127 loc) · 4.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
/*
Example 6: Distance Basic Readings
Using the Acconeer XM125 A121 60GHz Pulsed Coherent Radar Sensor.
This example shows how operate the XM125 when the device is in Distance Reading Mode.
The sensor is initialized, then the distance values will print out to the terminal in
mm.
By: Madison Chodikov
SparkFun Electronics
Date: 2024/1/22
SparkFun code, firmware, and software is released under the MIT License.
Please see LICENSE.md for further details.
Hardware Connections:
QWIIC --> QWIIC
Serial.print it out at 115200 baud to serial monitor.
Feel like supporting our work? Buy a board from SparkFun!
https://www.sparkfun.com/products/ - Qwiic XM125 Breakout
*/
#include "SparkFun_Qwiic_XM125_Arduino_Library.h"
#include <Arduino.h>
SparkFunXM125Distance radarSensor;
// I2C default address
uint8_t i2cAddress = SFE_XM125_I2C_ADDRESS;
// Presence range in mm used - 500mm to 5000mm (0.5 M to 5 M)
#define MY_XM125_RANGE_START 500
#define MY_XM125_RANGE_END 5000
void setup()
{
// Start serial
Serial.begin(115200);
Serial.println("");
Serial.println("-------------------------------------------------------");
Serial.println("XM125 Example 6: Basic Distance Readings");
Serial.println("-------------------------------------------------------");
Serial.println("");
Wire.begin();
// If begin is successful (0), then start example
if (radarSensor.begin(i2cAddress, Wire) == false)
{
Serial.println("Device failed to setup - Freezing code.");
while (1)
; // Runs forever
}
Serial.println("Starting Sensor...");
Serial.println();
// Start the sensor with the specified range values
int32_t setupError = radarSensor.distanceSetup(MY_XM125_RANGE_START, MY_XM125_RANGE_END);
if (setupError != 0)
{
Serial.print("Distance Detection Start Setup Error: ");
Serial.println(setupError);
}
Serial.println();
Serial.print("Distance Detection Started - range: ");
Serial.print(MY_XM125_RANGE_START);
Serial.print("mm to ");
Serial.print(MY_XM125_RANGE_END);
Serial.print("mm (");
Serial.print(MY_XM125_RANGE_START * 0.001);
Serial.print("m to ");
Serial.print(MY_XM125_RANGE_END * 0.001);
Serial.println("m )");
Serial.println();
delay(500);
}
void loop()
{
uint32_t retCode = radarSensor.detectorReadingSetup();
if (retCode != 0)
{
Serial.print("Distance Reading Setup Error: ");
Serial.println(retCode);
}
// How many distance values were detected? (0-9)
uint32_t numDistances = 0;
radarSensor.getNumberDistances(numDistances);
if (numDistances == 0)
Serial.print(".");
else
{
Serial.println();
Serial.print("Number of Values Detected: ");
Serial.println(numDistances);
}
uint32_t distance = 0;
int32_t distanceStrength = 0;
for (uint32_t i = 0; i < numDistances; i++)
{
if (radarSensor.getPeakDistance(i, distance) != ksfTkErrOk)
{
Serial.print("Error retrieving Distance Peak ");
Serial.print(i);
Serial.println();
continue;
}
Serial.print(" Distance Peak ");
Serial.print(i);
Serial.print(": ");
if (distance < 100)
{
Serial.print(distance);
Serial.print("mm");
}
else if (distance < 1000)
{
Serial.print(distance * 0.1);
Serial.print("cm");
}
else
{
Serial.print(distance * 0.001);
Serial.print("m");
}
if (radarSensor.getPeakStrength(i, distanceStrength) != ksfTkErrOk)
{
Serial.print("Error retrieving Distance Peak Strength");
Serial.print(i);
Serial.println();
continue;
}
Serial.print(" Distance Peak Strength ");
Serial.print(i);
Serial.print(": ");
Serial.println(distanceStrength);
}
// delay before next reading
delay(2500);
}