# Examples

## Use-Case

This example program demonstrates how to use the AndyMark **CAN Lidar Sensor** in an FRC robot program. It initializes the sensor over the **CAN bus** and continuously reads data while the robot is enabled. Values are displayed to the SmartDashboard in real time, allowing users to see exactly what the sensor is detecting and how the readings change as objects move closer or lighting conditions vary. This example is useful for quick bring-up and testing, validating CAN wiring and device IDs, understanding the sensor’s output, and troubleshooting sensor placement on a robot, and it can be used without needing in-depth programming knowledge.&#x20;

## Mounting Examples

<figure><img src="/files/FA5HtdNxAYD8sr2nnYrA" alt="" width="188"><figcaption></figcaption></figure>

## Code Example

You must first install the AndyMark vendor libraries. Instructions can be found [here](/frc-electronics/andymark-can-interface-utility.md)

View [Device API](/frc-electronics/can-sensors/can-lidar-am-5684/device-api.md) for a comprehensive list of commands

{% tabs %}
{% tab title="Java" %}

```java
import com.andymark.jni.AM_CAN_Lidar;
import com.andymark.jni.AM_CAN_Lidar.AM_LidarData;
import com.andymark.jni.AM_CAN_Lidar.AM_LidarDebugData;

//Initialize Device
//The device's default CAN is 0. Change it using AndyMark CAN interface utility
AM_CAN_Lidar myLidar = new AM_CAN_Lidar(0);
//Reset Report Period to the default of 50ms
myLidar.resetReportPeriod();

//Get data
AM_LidarData d = myLidar.getData();
AM_LidarDebugData dbg = myLidar.getDebugData();
//Put data on the smart dashboard
SmartDashboard.putNumber("Lidar/DistanceMm", d.distanceMm);
SmartDashboard.putNumber("Lidar/Status", d.status);
SmartDashboard.putNumber("Lidar/Flags", d.flags);
SmartDashboard.putNumber("Lidar/TimestampMs", d.millisStamp);
SmartDashboard.putNumber("LidarDebug/PeakSignalCentiMcps", dbg.peakSignalCentiMcps);
SmartDashboard.putNumber("LidarDebug/AmbientCentiMcps", dbg.ambientCentiMcps);
SmartDashboard.putNumber("LidarDebug/TimestampMs", dbg.millisStamp);
```

{% endtab %}

{% tab title="C++" %}

```cpp
//File to include
#include "AM_CAN_Lidar.h"

//Initialize device
//The device's default CAN is 0. Change it using AndyMark CAN interface utility
AM_CANLidar myLidar{0};

//Reset Report Period to the default of 50ms
myLidar.ResetReportPeriod();

//Get data
AM_LidarData d = myLidar.GetData();
AM_LidarDebugData dbg = myLidar.GetDebugData();

//Put data on the smart dashboard
frc::SmartDashboard::PutNumber("Lidar/DistanceMm", d.distanceMm);
frc::SmartDashboard::PutNumber("Lidar/Status", d.status);
frc::SmartDashboard::PutString("Lidar/StatusStr", LidarStatusToString(d.status));
frc::SmartDashboard::PutNumber("Lidar/Flags", d.flags);
frc::SmartDashboard::PutNumber("Lidar/TimestampMs", d.millisStamp);
frc::SmartDashboard::PutNumber("LidarDebug/PeakSignalCentiMcps", dbg.peakSignalCentiMcps);
frc::SmartDashboard::PutNumber("LidarDebug/AmbientCentiMcps", dbg.ambientCentiMcps);
frc::SmartDashboard::PutNumber("LidarDebug/TimestampMs", dbg.millisStamp);
```

{% endtab %}
{% endtabs %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.andymark.com/frc-electronics/can-sensors/can-lidar-am-5684/examples.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
