Crossfire to flight controller #23

Open
opened 2026-10-05 05:59:06 +02:00 by adam · 0 comments
Owner

ʼʼʼ

#include <HardwareSerial.h>

uint8_t crsfPacket[26]; // CRSF packet buffer

void setup() {
Serial.begin(420000); // Initialize serial communication at 420,000 baud
}

void loop() {
uint16_t channels[16] = {1500, 1500, 1000, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500}; // Example channel data
buildCRSFPacket(channels); // Build CRSF packet
sendCRSFPacket(); // Send CRSF packet
delay(10); // Send at 100 Hz
}

void buildCRSFPacket(uint16_t channels[16]) {
crsfPacket[0] = 0xC8; // Sync byte
crsfPacket[1] = 24; // Frame length (22 payload + 2)
crsfPacket[2] = 0x16; // Type (RC Channels)

for (int i = 0; i < 16; i++) {
    uint16_t crsfValue = map(channels[i], 1000, 2000, 0, 2047);
    crsfPacket[3 + i * 2] = crsfValue & 0xFF; // Low byte
    crsfPacket[4 + i * 2] = (crsfValue >> 8) & 0xFF; // High byte
}

crsfPacket[25] = calculateCRC(crsfPacket, 25); // Calculate CRC

}

void sendCRSFPacket() {
for (int i = 0; i < 26; i++) {
Serial.write(crsfPacket[i]);
}
}

uint8_t calculateCRC(uint8_t* data, uint8_t length) {
uint8_t crc = 0;
for (int i = 0; i < length; i++) {
crc ^= data[i];
}
return crc;
}

ʼʼʼ

ʼʼʼ #include <HardwareSerial.h> uint8_t crsfPacket[26]; // CRSF packet buffer void setup() { Serial.begin(420000); // Initialize serial communication at 420,000 baud } void loop() { uint16_t channels[16] = {1500, 1500, 1000, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500}; // Example channel data buildCRSFPacket(channels); // Build CRSF packet sendCRSFPacket(); // Send CRSF packet delay(10); // Send at 100 Hz } void buildCRSFPacket(uint16_t channels[16]) { crsfPacket[0] = 0xC8; // Sync byte crsfPacket[1] = 24; // Frame length (22 payload + 2) crsfPacket[2] = 0x16; // Type (RC Channels) for (int i = 0; i < 16; i++) { uint16_t crsfValue = map(channels[i], 1000, 2000, 0, 2047); crsfPacket[3 + i * 2] = crsfValue & 0xFF; // Low byte crsfPacket[4 + i * 2] = (crsfValue >> 8) & 0xFF; // High byte } crsfPacket[25] = calculateCRC(crsfPacket, 25); // Calculate CRC } void sendCRSFPacket() { for (int i = 0; i < 26; i++) { Serial.write(crsfPacket[i]); } } uint8_t calculateCRC(uint8_t* data, uint8_t length) { uint8_t crc = 0; for (int i = 0; i < length; i++) { crc ^= data[i]; } return crc; } ʼʼʼ <!-- github-sync-id:2889390270 -->
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: adam/LoraSA#23