> For the complete documentation index, see [llms.txt](https://voltbro.gitbook.io/en-vbcores/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://voltbro.gitbook.io/en-vbcores/cyphal-can/cyphal-arduino/otpravka-i-poluchenie-soobshenii-po-cyphal.md).

# Отправка и получение сообщений по cyphal

В примере ниже, мы собираемся отправлять в соответствующие топики угол положения мотора и угловую скорость мотора.

{% file src="/files/ts9ER37xPxQcUEdgOZ1a" %}

{% file src="/files/Ce9AMvTs30gfito35GX6" %}

В[ спецификации](https://opencyphal.org/specification/Cyphal_Specification.pdf) сказано, что нода также должна отправлять сообщение типа Heartbeat:

<figure><img src="https://content.gitbook.com/content/liPblHHYVNdK0NqFTupF/blobs/LNA5gVxEDEaaqxfnKXwg/image.png" alt=""><figcaption></figcaption></figure>

В сообщении Heartbeat есть поля Health и Mode, подробнее можно почитать в спецификации. Нам также нужны сообщения типа угловая скорость и угол. Идем в [репозиторий](https://github.com/OpenCyphal/public_regulated_data_types) со стандартными типами сообщений и выбираем то, что подходит под наши задачи. В нашем примере это: uavcan/si/unit/angle/Scalar.1.0.dsdl и uavcan/si/unit/angular\_velocity/Scalar.1.0.dsdl

Подключаем их как библиотеки  вместе со стандартными библиотеками для работы с модулем и can-ом:

```arduino
#include <utility>

#include <VBCoreG4_arduino_system.h>
#include <cyphal.h>

#include <uavcan/node/Heartbeat_1_0.h>
#include <uavcan/node/Health_1_0.h>
#include <uavcan/node/Mode_1_0.h>
#include <uavcan/si/unit/angular_velocity/Scalar_1_0.h>
#include <uavcan/si/unit/angle/Scalar_1_0.h>
```

Чтобы не использовать длинные названия типов, переименуем их:

```cpp
TYPE_ALIAS(HBeat, uavcan_node_Heartbeat_1_0)
TYPE_ALIAS(Angle, uavcan_si_unit_angle_Scalar_1_0)
TYPE_ALIAS(AngularVelocity, uavcan_si_unit_angular_velocity_Scalar_1_0)
```

В основном цикле будет вызываться функция, которая в качестве аргумента принимает&#x20;

```cpp
comms_loop(current_millis);
```
