Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -39,40 +39,45 @@ int32_t setupError = 0;
int32_t presValError = 0;
int32_t detectorError = 0;

// Presence range in mm used
#define MY_XM125_RANGE_START 200
#define MY_XM125_RANGE_END 1000
void setup()
{
// Start serial
Serial.begin(115200);

Serial.println("");
Serial.println("-------------------------------------------------------");
Serial.println("XM125 Example 1: Basic Presence Readings");
Serial.println("-------------------------------------------------------");
Serial.println("");

Wire.begin();

// If begin is successful (1), then start example
int startErr = radarSensor.begin(i2cAddress, Wire);
if (startErr == 1)
bool success = radarSensor.begin(i2cAddress, Wire);
if (success == false)
{
Serial.println("Begin");
}
else // Otherwise, infinite loop
{
Serial.print("Start Error Code: ");
Serial.println(startErr);
Serial.println("Device failed to setup - Freezing code.");
while (1)
; // Runs forever
}

// Start the sensor with default register values
int32_t setupError = radarSensor.presenceDetectorStart();
int32_t setupError = radarSensor.presenceDetectorStart(MY_XM125_RANGE_START, MY_XM125_RANGE_END);
if (setupError != 0)
{
Serial.print("Presence Detection Start Setup Error: ");
Serial.println(setupError);
}

// New line and delay for easier reading
Serial.print("Presense Detection Started - range: ");
Serial.print(MY_XM125_RANGE_START);
Serial.print("mm to ");
Serial.print(MY_XM125_RANGE_END);
Serial.println("mm");
Serial.println();

delay(500);
}

Expand All @@ -81,28 +86,32 @@ void loop()
// Busy wait loop until data is ready
radarSensor.presenceBusyWait();

// Get the presence distance value and print out if no errors
// Get the presence distance value and print out if no errors.
// Note - this returns if Presense is detected now, or since last check (sticky)
presValError = radarSensor.getPresenceDistanceValuemm(distance);

if (presValError == 0)
{
Serial.print("Presence Detected: ");
Serial.print(distance);
Serial.println("mm");
// Serial.print(distance * .1);
// Serial.println("cm");
// Serial.print(distance * .001);
// Serial.println("m");
// Serial.print(distance * .001);
// Serial.println("m");
// Serial.print(distance * .03937008);
// Serial.println("In");
// if distance is > 0, presence is detected, else it is not
if (distance > 0)
{
Serial.print("YES - Distance: ");
Serial.print(distance);
Serial.print("mm, ");
Serial.print(distance * .1);
Serial.print("cm, ");
Serial.print(distance * .001);
Serial.print("m, ");
Serial.print(distance * .03937008);
Serial.println("In");
}
else
Serial.println("NO");
}
else
{
Serial.println("Error returning presence distance value");
}

// Delay 0.5 seconds between readings
delay(500);
// Delay 2.5 seconds between readings
delay(2500);
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,185 +29,116 @@ SparkFunXM125Distance radarSensor;
// I2C default address
uint8_t i2cAddress = SFE_XM125_I2C_ADDRESS;

// Setup Variables
uint32_t startVal = 0;
uint32_t endVal = 0;
uint32_t numDistances = 9;
uint32_t calibrateNeeded = 0;
uint32_t measDistErr = 0;

// Error statuses
uint32_t errorStatus = 0;
uint32_t distanceSetupError = 0;

// Distance Variables
int32_t distancePeakStrength0 = 0;
uint32_t distancePeak0 = 0;
int32_t distancePeakStrength1 = 0;
uint32_t distancePeak1 = 0;
int32_t distancePeakStrength2 = 0;
uint32_t distancePeak2 = 0;
int32_t distancePeakStrength3 = 0;
uint32_t distancePeak3 = 0;
int32_t distancePeakStrength4 = 0;
uint32_t distancePeak4 = 0;
int32_t distancePeakStrength5 = 0;
uint32_t distancePeak5 = 0;
int32_t distancePeakStrength6 = 0;
uint32_t distancePeak6 = 0;
int32_t distancePeakStrength7 = 0;
uint32_t distancePeak7 = 0;
int32_t distancePeakStrength8 = 0;
uint32_t distancePeak8 = 0;
int32_t distancePeakStrength9 = 0;
uint32_t distancePeak9 = 0;
// Presence range in mm used
#define MY_XM125_RANGE_START 200
#define MY_XM125_RANGE_END 2000

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) == 1)
{
Serial.println("Begin");
}
else // Otherwise, infinite loop
if (radarSensor.begin(i2cAddress, Wire) == false)
{
Serial.println("Device failed to setup - Freezing code.");
while (1)
; // Runs forever
}

int32_t setupError = radarSensor.distanceBegin();
Serial.println("Starting Sensor...");
Serial.println();
// Start the sensor with the specified range values
int32_t setupError = radarSensor.distanceBegin(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.println("mm");
Serial.println();
// New-line and 0.5 second delay for easier reading
Serial.println();
delay(500);
}

void loop()
{
distanceSetupError = radarSensor.distanceDetectorReadingSetup();
if (distanceSetupError != 0)
uint32_t retCode = radarSensor.distanceDetectorReadingSetup();
if (retCode != 0)
{
Serial.print("Distance Reading Setup Error: ");
Serial.println(distanceSetupError);
Serial.println(retCode);
}

// Read PeakX Distance and PeakX Strength registers for the number of distances detected
radarSensor.getDistancePeak0Distance(distancePeak0);
radarSensor.getDistancePeak0Strength(distancePeakStrength0);
radarSensor.getDistancePeak1Distance(distancePeak1);
radarSensor.getDistancePeak1Strength(distancePeakStrength1);
radarSensor.getDistancePeak2Distance(distancePeak2);
radarSensor.getDistancePeak2Strength(distancePeakStrength2);
radarSensor.getDistancePeak3Distance(distancePeak3);
radarSensor.getDistancePeak3Strength(distancePeakStrength3);
radarSensor.getDistancePeak4Distance(distancePeak4);
radarSensor.getDistancePeak4Strength(distancePeakStrength4);
radarSensor.getDistancePeak5Distance(distancePeak5);
radarSensor.getDistancePeak5Strength(distancePeakStrength5);
radarSensor.getDistancePeak6Distance(distancePeak6);
radarSensor.getDistancePeak6Strength(distancePeakStrength6);
radarSensor.getDistancePeak7Distance(distancePeak7);
radarSensor.getDistancePeak7Strength(distancePeakStrength7);
radarSensor.getDistancePeak8Distance(distancePeak8);
radarSensor.getDistancePeak8Strength(distancePeakStrength8);
radarSensor.getDistancePeak9Distance(distancePeak9);
radarSensor.getDistancePeak9Strength(distancePeakStrength9);

// If a peak distance was detected, then read out the distance and strength
if (distancePeak0 != 0)
{
Serial.print("Peak0 Distance, Strength: ");
Serial.print(distancePeak0);
Serial.print("mm, ");
Serial.println(distancePeakStrength0);
Serial.println();
}
if (distancePeak1 != 0)
{
Serial.print("Peak1 Distance, Strength: ");
Serial.print(distancePeak1);
Serial.print("mm, ");
Serial.println(distancePeakStrength1);
Serial.println();
}
if (distancePeak2 != 0)
{
Serial.print("Peak2 Distance, Strength: ");
Serial.print(distancePeak2);
Serial.print("mm, ");
Serial.println(distancePeakStrength2);
Serial.println();
}
if (distancePeak3 != 0)
{
Serial.print("Peak3 Distance, Strength: ");
Serial.print(distancePeak3);
Serial.print("mm, ");
Serial.println(distancePeakStrength3);
Serial.println();
}
if (distancePeak4 != 0)
{
Serial.print("Peak4 Distance, Strength: ");
Serial.print(distancePeak4);
Serial.print("mm, ");
Serial.println(distancePeakStrength4);
Serial.println();
}
if (distancePeak5 != 0)
{
Serial.print("Peak5 Distance, Strength: ");
Serial.print(distancePeak5);
Serial.print("mm, ");
Serial.println(distancePeakStrength5);
Serial.println();
}
if (distancePeak6 != 0)
{
Serial.print("Peak6 Distance, Strength: ");
Serial.print(distancePeak6);
Serial.print("mm, ");
Serial.println(distancePeakStrength6);
Serial.println();
}
if (distancePeak7 != 0)
{
Serial.print("Peak7 Distance, Strength: ");
Serial.print(distancePeak7);
Serial.print("mm, ");
Serial.println(distancePeakStrength7);
Serial.println();
}
if (distancePeak8 != 0)
// How many distance values were detected? (0-9)
uint32_t numDistances = 0;
radarSensor.getDistanceNumberDistances(numDistances);

if (numDistances == 0)
Serial.print(".");
else
{
Serial.print("Peak8 Distance, Strength: ");
Serial.print(distancePeak8);
Serial.print("mm, ");
Serial.println(distancePeakStrength8);
Serial.println();
Serial.print("Number of Values Detected: ");
Serial.println(numDistances);
}
if (distancePeak9 != 0)

uint32_t distance = 0;
int32_t distanceStrength = 0;
for (uint32_t i = 0; i < numDistances; i++)
{
Serial.print("Peak9 Distance, Strength: ");
Serial.print(distancePeak9);
Serial.print("mm, ");
Serial.println(distancePeakStrength9);
Serial.println();
if (radarSensor.getDistancePeakDistance(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.getDistancePeakStrength(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);
}

// Half a second delay for easier readings
delay(500);
// delay before next reading
delay(2500);
}
Loading