CRSF

/**
 *  Для того щоб почативикористовувати мінімальний функціонал бібліотеки
 * Потрібно її заінклюдити
 */
#include <CrsfSerial.h>
/**
 *  В даному прикладі розглядається підключення приймача CRSF до Serial3
 * Arduino Mega 2560 або до  Serial якщо у вас інша "доска".
 * 
 * Будь ласка не використовуйте програмні реалізації серійного порту.
 * Використовуйте тільки апаратні серійні інтерфейси оскільки протокол 
 * CRSF використовує нестандартну швидкість передачі даних яка визначена
 * в константі CRSF_BAUDRATE. Якщо користуєтесь редактором Arduino IDE 
 * то ви не знайдете у моніторі серійного порту значення швидкості 420000
 * boud.
 *
 * По друге. Переконайтеся що ваша плата може працювати на такій швидкості
 * послідовного інтерфейсу. Ваш мікроеонтролер можливо не може працювати на
 * такій високій частоті через апаратні обмеження (не достатня частота тактового
 * генератора), софтверні обмеження (Не можливість вказати нестандартну швидкість)
 */
#if defined(__AVR_ATmega2560__)
/**
 * Тут ми створюємо об'єкт crsf класу CrsfSerial, який слухатиме Serial3.
 * 
 * В конструкторі можна задати іншу швидкість роботи, але для цього потрібно
 * переналаштовувати приймач, якщо він підтримує таку кастомізацію. Перевірте
 * ваш модуль на наявність такої опції
 */
CrsfSerial crsf(Serial3, CRSF_BAUDRATE);
#else
/**
 * Для плат які зібрані не на ATmega2560
 */
// CrsfSerial crsf(Serial, CRSF_BAUDRATE); ///< Цей
// CrsfSerial crsf(Serial);                ///< і цей записи тотожні
                                           /// за замовчуванням crsf працює 
                                           /// на швидкості 420000 бод
#error NOT MEGA2560
#endif


void packetChannels(); ///< Тут ми оголошуємо функцію яку реалізуємо пізніше
                       /// Ця функція буде виконуватися коли на порт "прилетить"
                       /// пакет з командами

/**
 *  Цей приклад написано для Ардуїно Мега і призначений для тестування пульта та
 * роботи скетчу.
 *
 * Скетч очікує що модуль приймача вісить на Serial3 а вся інформація для відладки
 * вилітає у стандартний серійний порт у монітор порта
*/

void setup() {
  Serial.begin(115200);                    ///< Ініціюємо черійний порт для відладкт
  crsf.begin();                            ///< Починаємо слухати приймач
  crsf.onPacketChannels = &packetChannels; ///< Вказуємо яка функція "витягає" команди
}


void loop() { crsf.loop(); }  ///< Тут живе програма

void packetChannels() {                              ///< Функція яка обробляє пакет
  for (auto ch{1}; ch <= CRSF_NUM_CHANNELS; ++ch) {  ///< Проходимо по всіх каналах
    Serial.print(crsf.getChannel(ch));               ///< Друкуємо
    if (ch != CRSF_NUM_CHANNELS) Serial.print(", "); ///< Ствимо розділові знаки
  }                                                  ///< Повторюємо
  Serial.println();                                  ///< Починаємо з нового рядка
}
Деталі

При виявленні неточностей чи помилок буду вдячний за фітбек