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

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

{% file src="<https://3551773033-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBjLyfPc4FcQUfXFi5fQr%2Fuploads%2F7kJMt2ZnNXyc9f2kDgjH%2Fcyphal_can_send.ino?alt=media&token=7258b691-d27a-4a16-bb85-6c33d5c77cb7>" %}

{% file src="<https://3551773033-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBjLyfPc4FcQUfXFi5fQr%2Fuploads%2FjPfNo4bazyuyP5kifIbQ%2Fcyphal_can_recv.ino?alt=media&token=52edc03a-ce00-4493-8457-2e81a6e37d00>" %}

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

<figure><img src="https://3551773033-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBjLyfPc4FcQUfXFi5fQr%2Fuploads%2FsZ4uVcYGvqywPQYLuOck%2Fimage.png?alt=media&#x26;token=df1980d1-e5c9-4c79-8796-cd88cd463756" 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);
```
