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(); ///< Починаємо з нового рядка
}
Деталі
При виявленні неточностей чи помилок буду вдячний за фітбек