çalışmalar sonunda çıktı alabildim test devam ediyor. Daha ileri taşımak için paylaşıyorum Kodu
#include <HardwareSerial.h>
HardwareSerial radarSerial(2);
#define RADAR_RX_PIN 16
#define RADAR_TX_PIN 17
const byte HEADER[4] = {0xF4, 0xF3, 0xF2, 0xF1};
const byte FOOTER[4] = {0xF8, 0xF7, 0xF6, 0xF5};
void setup() {
Serial.begin(115200);
radarSerial.begin(115200, SERIAL_8N1, RADAR_RX_PIN, RADAR_TX_PIN);
radarSerial.setTimeout(10);
Serial.println("HLK-LD2451 Radar Başlatıldı...");
}
void loop() {
static byte buffer[128];
static int index = 0;
while (radarSerial.available()) {
byte data = radarSerial.read();
// 1. Adım: Başlık Tespiti (F4 F3 F2 F1)
if (index < 4) {
if (data == HEADER[index]) {
buffer[index++] = data;
if (index == 4) Serial.println("\nBaşlık Algılandı!");
} else {
index = 0;
}
}
// 2. Adım: Veri ve Footer Okuma
else {
buffer[index++] = data;
// Veri Uzunluğu Okuma (6. ve 7. Byte)
if (index == 6) {
int dataLength = buffer[4] | (buffer[5] << 8);
Serial.printf("Beklenen Veri Uzunluğu: %d\n", dataLength);
if (dataLength < 0 || dataLength > 100) index = 0; // Geçersiz uzunluk
}
// Paket Tamamlama Kontrolü
if (index >= 10) {
int dataLength = buffer[4] | (buffer[5] << 8);
int totalLength = 4 + 2 + dataLength + 4;
// Buffer Taşması Kontrolü
if (totalLength > sizeof(buffer)) {
Serial.println("HATA: Buffer taşması!");
index = 0;
return;
}
// Kalan Veriyi Oku
while (index < totalLength && radarSerial.available()) {
buffer[index++] = radarSerial.read();
}
// Footer Kontrolü (Son 4 Byte)
bool footerOK = true;
for (int i=0; i<4; i++) {
if (buffer[totalLength-4+i] != FOOTER[i]) {
footerOK = false;
Serial.printf("HATA: Footer[%d] = %02X (Beklenen: %02X)\n", i, buffer[totalLength-4+i], FOOTER[i]);
break;
}
}
if (!footerOK) {
Serial.println("HATA: Footer geçersiz!");
index = 0;
return;
}
// Ham Veriyi Yazdır
Serial.print("Alınan Paket: ");
for (int i=0; i<totalLength; i++) Serial.printf("%02X ", buffer[i]);
Serial.println();
// Veriyi İşle
processData(buffer + 6, dataLength); // Veri bloğu 6. bytedan başlar
index = 0;
}
}
}
}
//--------------------------------------------------
// VERİ İŞLEME
//--------------------------------------------------
void processData(byte* data, int length) {
if (length <= 0) return;
// Alarm Durumu (1. Byte)
byte alarmStatus = data[0];
Serial.printf("Alarm Durumu: %s\n", (alarmStatus == 0x01) ? "Hedef Var" : "Yok");
// Hedef Sayısı (2. Byte)
byte targetCount = data[1];
Serial.printf("Hedef Sayısı: %d\n", targetCount);
// Her Hedef 5 Byte: [Açı(1)][Mesafe(1)][Yön(1)][Hız(1)][SNR(1)]
for (int i=0; i<targetCount; i++) {
int offset = 2 + i*5; // Alarm (1) + HedefSayısı (1) + (i*5)
if (offset + 4 >= length) {
Serial.println("HATA: Veri boyutu yetersiz!");
break;
}
// Açı: 0x80 çıkarılarak işaretliye çevrilir
int8_t angle = data[offset] - 0x80; // Örn: 0x8A → 10°
// Mesafe: 1 byte (direkt metre)
uint8_t distance_m = data[offset + 1]; // Örn: 0x28 → 40m
// Yön ve Hız
byte direction = data[offset + 2]; // 0x01: Yaklaşan, 0x00: Uzaklaşan
uint8_t speed_kmh = data[offset + 3]; // Direkt km/h
// SNR
uint8_t snr = data[offset + 4]; // 0-255
Serial.printf("Hedef %d: Mesafe=%d m, Açı=%d°, Yön=%s, Hız=%d km/h, SNR=%d\n",
i+1, distance_m, angle,
(direction == 0x01) ? "Yaklaşan" : "Uzaklaşan",
speed_kmh, snr);
}
}
Serial Monitor Çıktı
Başlık Algılandı!
Beklenen Veri Uzunluğu: 0
Alınan Paket: F4 F3 F2 F1 00 00 F8 F7 F6 F5
Başlık Algılandı!
Beklenen Veri Uzunluğu: 7
Alınan Paket: F4 F3 F2 F1 07 00 01 01 85 02 01 03 CE F8 F7 F6 F5
Alarm Durumu: Hedef Var
Hedef Sayısı: 1
Hedef 1: Mesafe=2 m, Açı=5°, Yön=Yaklaşan, Hız=3 km/h, SNR=206
Başlık Algılandı!
Beklenen Veri Uzunluğu: 7
Alınan Paket: F4 F3 F2 F1 07 00 01 01 80 02 01 04 CE F8 F7 F6 F5
Alarm Durumu: Hedef Var
Hedef Sayısı: 1
Hedef 1: Mesafe=2 m, Açı=0°, Yön=Yaklaşan, Hız=4 km/h, SNR=206