Hello, I’m making a dashboard for my Tofas. I’m going to participate in trade shows, but I need to send information from Arduino to RealDash. However, I haven’t been able to create the XML file. It says the file hasn’t been parsed. Could you help? I’m sending my XML file and Arduino code. I’d be very grateful if you could help. I’m doing my own electrical installation, but I’m very new to programming.
<?xml version="1.0" encoding="utf-8"?><frame id="3201">
<value name="Yağ Basıncı Lambası" startbit="0" bitcount="1"></value> <value name="Akü/Şarj Lambası" startbit="1" bitcount="1"></value> <value name="Hararet Uyarı Lambası" startbit="2" bitcount="1"></value> <value name="El Freni Lambası" startbit="3" bitcount="1"></value> <value name="Kapı Açık Lambası" startbit="4" bitcount="1"></value> <value name="Kısa Far Lambası" startbit="5" bitcount="1"></value> <value name="Uzun Far Lambası" startbit="6" bitcount="1"></value> <value name="Park Lambası" startbit="7" bitcount="1"></value> <value name="Ön Sis Lambası" startbit="8" bitcount="1"></value> <value name="Arka Sis Lambası" startbit="9" bitcount="1"></value> <value startbit="10" bitcount="6"></value>
<value offset="2" length="6"></value>
</frame>
<frame id="3203">
<value targetId="2" units="rpm" offset="0" length="2"></value>
<value targetId="12" units="c" offset="2" length="2"></value>
<value targetId="33" units="%" offset="4" length="2"></value>
<value offset="6" length="2"></value>
</frame>
<frame id="3204">
<value targetId="36" units="km/h" offset="0" length="2"></value>
<value targetId="44" units="km" offset="2" length="4"></value>
<value offset="6" length="2"></value>
</frame>
// ---------- İLETİŞİM VE ZAMAN AYARLARI ----------
const long BAUD_RATE = 115200;
const long TRANSMIT_INTERVAL_MS = 100; // Veri gönderme aralığı
unsigned long previousMillis = 0;
// ---------- PİN TANIMLAMALARI ----------
// Hız / Kilometre (D2 - INT0)
const byte HALL_SENSOR_PIN = 2;
// Dijital Girişler (GND ile tetiklenecek - INPUT_PULLUP gerekli)
// Pinleri, RealDash’teki sıralamada bitlere karşılık gelecek şekilde sıraya koyun
const byte KISA_FAR_PIN = 3;
const byte UZUN_FAR_PIN = 4;
const byte PARK_LAMBASI_PIN = 5;
const byte SIS_FARI_PIN = 6;
const byte EL_FRENI_PIN = 7;
const byte KAPI_ACIK_PIN = 8;
// Yağ, Akü ve Hararet Uyarıları için pin yoksa (simülasyon) kullanılmayacaktır.
// ---------- HIZ VE KİLOMETRE AYARLARI ----------
const float TIRE_CIRCUMFERENCE_M = 1.97; // !!! Lütfen Kendi Lastik Çevrenizi Girin (metre) !!!
const float PULSES_PER_REVOLUTION = 1.0;
const unsigned long MIN_PULSE_INTERVAL_MS = 10;
volatile unsigned long totalPulseCount = 0;
unsigned long odometer_km = 0;
unsigned int vehicleSpeed_kmh = 0;
unsigned long lastPulseTime = 0;
unsigned long pulseInterval = 0;
const float MIN_SPEED_THRESHOLD = 0.5;
// ---------- GÖNDERİLECEK VERİ DEĞİŞKENLERİ ----------
// Analog/Sayısallaştırılmış Değerler
unsigned int currentRPM = 0;
unsigned int coolantTemp = 90; // Santigrat (°C)
unsigned int fuelPercent = 75; // Yüzde (%)
// Dijital Lambalar (1 = Aktif / YANAN LAMBA)
byte yagLambasi = 0;
byte akuLambasi = 0;
byte hararetLambasi = 0;
byte elFreniLambasi = 0;
byte kapiAcikLambasi = 0;
byte uzunFarLambasi = 0;
byte kisaFarLambasi = 0;
byte parkLambasi = 0;
byte sisFariLambasi = 0;
// ---------- KESME RUTİNİ (ISR) - Hız/KM Sayımı ----------
void countPulse() {
unsigned long currentTime = millis();
if (currentTime - lastPulseTime < MIN_PULSE_INTERVAL_MS) {
return;
}
totalPulseCount++;
pulseInterval = currentTime - lastPulseTime;
lastPulseTime = currentTime;
}
// ---------- SETUP ----------
void setup() {
Serial.begin(BAUD_RATE);
// Hız/KM pin ayarı
pinMode(HALL_SENSOR_PIN, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(HALL_SENSOR_PIN), countPulse, FALLING);
// Dijital Pinler (GND ile tetiklenecek)
pinMode(KISA_FAR_PIN, INPUT_PULLUP);
pinMode(UZUN_FAR_PIN, INPUT_PULLUP);
pinMode(PARK_LAMBASI_PIN, INPUT_PULLUP);
pinMode(SIS_FARI_PIN, INPUT_PULLUP);
pinMode(EL_FRENI_PIN, INPUT_PULLUP);
pinMode(KAPI_ACIK_PIN, INPUT_PULLUP);
Serial.println(“RealDash Serial Gosterge Sistemi Baslatildi.”);
}
// ---------- LOOP ----------
void loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= TRANSMIT_INTERVAL_MS) {
previousMillis = currentMillis;
// --- 1. VERİ OKUMA / SİMÜLASYON ---
// RPM Simülasyonu
currentRPM = (unsigned int)(1500 + (sin(currentMillis / 500.0) + 1) * 1000);
// Dijital Lambalar Okuma (LOW = Aktif / Yanan Lamba)
kisaFarLambasi = (digitalRead(KISA_FAR_PIN) == LOW) ? 1 : 0;
uzunFarLambasi = (digitalRead(UZUN_FAR_PIN) == LOW) ? 1 : 0;
parkLambasi = (digitalRead(PARK_LAMBASI_PIN) == LOW) ? 1 : 0;
sisFariLambasi = (digitalRead(SIS_FARI_PIN) == LOW) ? 1 : 0;
elFreniLambasi = (digitalRead(EL_FRENI_PIN) == LOW) ? 1 : 0;
kapiAcikLambasi = (digitalRead(KAPI_ACIK_PIN) == LOW) ? 1 : 0;
// Yağ, Akü, Hararet Uyarı Simülasyonu (Sensör bağlamadıysanız)
yagLambasi = (currentMillis / 5000) % 2; // 5 saniyede bir yanıp sönsün
akuLambasi = 0;
hararetLambasi = (coolantTemp > 105) ? 1 : 0;
// Hararet ve Yakıt Simülasyonu
coolantTemp = (unsigned int)(90 + (sin(currentMillis / 10000.0) + 1) * 15); // 90-120 °C arası
fuelPercent = (unsigned int)(75 + (cos(currentMillis / 20000.0) * 20)); // %55-%95 arası
// Hız ve Kilometre Hesaplaması
float totalDistance_m = (float)totalPulseCount * (TIRE_CIRCUMFERENCE_M / PULSES_PER_REVOLUTION);
odometer_km = (unsigned long)(totalDistance_m / 1000.0);
float vehicleSpeed_kmh_float = 0.0;
if (pulseInterval > 0) {
vehicleSpeed_kmh_float = ((TIRE_CIRCUMFERENCE_M / PULSES_PER_REVOLUTION) / 1000.0) / ((float)pulseInterval / 3600000.0);
}
if (currentMillis - lastPulseTime > 1000 || vehicleSpeed_kmh_float < MIN_SPEED_THRESHOLD) {
vehicleSpeed_kmh_float = 0.0;
}
vehicleSpeed_kmh = (unsigned int)round(vehicleSpeed_kmh_float);
// ----------------------------------------------------
// 2. SERIAL VERİ GÖNDERİMİ (CSV Formatı)
// ----------------------------------------------------
// 1. RPM (Target ID 2)
Serial.print(currentRPM);
Serial.print(",");
// 2. Hız (Target ID 36)
Serial.print(vehicleSpeed_kmh);
Serial.print(",");
// 3. Kilometre (Target ID 44)
Serial.print(odometer_km);
Serial.print(",");
// 4. Hararet (°C) (Target ID 12)
Serial.print(coolantTemp);
Serial.print(",");
// 5. Yakıt (%) (Target ID 33)
Serial.print(fuelPercent);
Serial.print(",");
// Dijital Lambalar (ECU Specific Digital 1'den başlar)
// Yağ (Digital 1)
Serial.print(yagLambasi);
Serial.print(",");
// Akü (Digital 2)
Serial.print(akuLambasi);
Serial.print(",");
// Hararet Lambası (Digital 3)
Serial.print(hararetLambasi);
Serial.print(",");
// El Freni (Digital 4)
Serial.print(elFreniLambasi);
Serial.print(",");
// Kapı Açık (Digital 5)
Serial.print(kapiAcikLambasi);
Serial.print(",");
// Kısa Far (Digital 6)
Serial.print(kisaFarLambasi);
Serial.print(",");
// Uzun Far (Digital 7)
Serial.print(uzunFarLambasi);
Serial.print(",");
// Park Lambası (Digital 8)
Serial.print(parkLambasi);
Serial.print(",");
// Sis Farı (Digital 9) - Son değer olduğu için println kullanılır.
Serial.println(sisFariLambasi);
}
}