#include <HardwareSerial.h> #include <CRC8.h> #include <SPI.h> #include <LoRa.h> #define CRSF_SYNC_BYTE 0xC8 #define CRSF_FRAMETYPE_LINK_STATISTICS 0x14 #define CRSF_MAX_PACKET_SIZE 64 #define CRSF_BAUDRATE 420000 #define SCK 12 #define MISO 13 #define MOSI 14 #define SS 15 #define RST 4 #define DIO0 5 // Структура для зберігання даних статистики з'єднання typedef struct PACKED { uint8_t uplink_RSSI_1; uint8_t uplink_RSSI_2; uint8_t uplink_Link_quality; int8_t uplink_SNR; uint8_t active_antenna; uint8_t rf_Mode; uint8_t uplink_TX_Power; uint8_t downlink_RSSI; uint8_t downlink_Link_quality; int8_t downlink_SNR; } crsfLinkStatistics_t; crsfLinkStatistics_t linkStats; // Функція для розрахунку CRC8 uint8_t calculateCRC(uint8_t *data, size_t length) { CRC8 crc8; crc8.setPolynome(0xD5); crc8.restart(); for (size_t i = 0; i < length; i++) { crc8.add(data[i]); } return crc8.getCRC(); } // Функція для відправки пакету статистики з'єднання void sendLinkStatistics() { uint8_t packet[CRSF_MAX_PACKET_SIZE]; size_t payloadLength = sizeof(crsfLinkStatistics_t); packet[0] = CRSF_SYNC_BYTE; packet[1] = payloadLength + 2; // Довжина (payload + type + crc) packet[2] = CRSF_FRAMETYPE_LINK_STATISTICS; memcpy(&packet[3], &linkStats, payloadLength); // Розрахунок і додавання CRC8 uint8_t crc = calculateCRC(&packet[2], payloadLength + 1); packet[3 + payloadLength] = crc; // Відправка пакету через Serial1 Serial.write(packet, payloadLength + 4); } void setup() { // Serial.begin(115200); // Ініціалізація серійного порту для виведення даних на монітор Serial.begin(CRSF_BAUDRATE); // Ініціалізація Serial1 для CRSF // Заповнення структури статистики з'єднання прикладними даними // linkStats.uplink_RSSI_1 = 44; SPI.pins(SCK, MISO, MOSI, SS); //setup LoRa transceiver module LoRa.setPins(SS, RST, DIO0); if (!LoRa.begin(868E6)) { Serial.println("Starting LoRa failed!"); while (1); } //LoRa.enableCrc(); // LoRa.setFrequency(750E6); LoRa.receive(); LoRa.setGain(1); LoRa.setSpreadingFactor(12); LoRa.setSignalBandwidth(10.4E3); //7.8E3, 10.4E3, 15.6E3, 20.8E3, 31.25E3, 41.7E3, 62.5E3, 125E3, and 250E3. Serial.println("LoRa initialised at 868 MHz"); } void loop() { int maxRSSI = 130; int bfRSSI = 0; int rssi = 0; int bc = 0; for (int i = 0; i < 180; i++) { int packetSize = LoRa.parsePacket(); if (packetSize){ // Serial.println( packetSize); } rssi = LoRa.rssi(); if (rssi < 0) { rssi *= -1; } if (rssi < maxRSSI) { maxRSSI = rssi; // Оновлення максимального значення } delay(1); // Невелика затримка між читаннями } // Serial.println(rssi); //Serial.println(bfRSSI); // Serial.println(maxRSSI); // Serial.print("Frequency: "); // Serial.print(rssi); // Serial.print(" MHz - RSSI: "); // Serial.print(maxRSSI); // Serial.println(" dBm"); linkStats.uplink_RSSI_1 = maxRSSI; sendLinkStatistics(); // Виклик функції відправки пакету статистики з'єднання // delay(2100); // Затримка перед відправкою наступного пакету }
No dependencies set.
The note is not visible to the blocked user.
ELRS to Flight controllerto ELRS to Flight controller