Logitech DFGT'nin çalışmayan butonlarını Arduino Pro Micro ile çalıştırmak mümkün mü?

XpertTR

Decapat
Katılım
1 Haziran 2023
Mesajlar
626
Çözümler
8
Yer
Hatay
Arkadaşlar 2.el DFGT aldım çok uygun fiyattan uygun olma sebebi üzerindeki butonların çalışmıyor olması. Ben de içini açıp tamir etme yoluna girdim ama anakart ile direksiyon arasındaki soket kablosu komple yok. Soketler boşta duruyor. Uzun süre araştırdım kablo renklerine ulaşmaya çalıştım bir şekilde renkleri çözdüm ama 6 pinin hepsini bağladığımda tepki vermiyor kalibrasyon bile yapmıyor. Kabloları söktüğümde direksiyon çalışıyor tabii butonlar iptal. AI yardımı ile Arduino aracılığı ile butonları ayrı bir kontrolcüymüş gibi aktif edebileceğimi gördüm. Teorik olarak mantıklı geliyor sizce bu işe girmeye değer mi ve sonuç alabilir miyim? Bilgisi olan varsa yardımcı olabilirse çok sevinirim.

Bendeki DFGT 6 pinli soket bu şekilde boşta
dfgt1.png

Burada tutulan kablo bende yok
dfgt2.png

Pinout tablosunu yabancı bir siteden buldum
pinout.png


DFGT direksiyon butonları 3 adet 74HC165 isimli shift register ile çalışıyor.
AI bana Arduino Pro Micro ile çalıştırabileceğim kod ve bağlantıları şu şekilde verdi
DFGT Kablosu → Arduino Pro Micro
---------------------------------------
Red (GND) → GND
Brown (VCC +5V) → VCC
Pink (Q7) → MISO (D14)
Orange (CLK) → SCK (D15)
Yellow (PL / LOAD)→ D4
Green (CE?) → GND (gerekirse)

Arduino Kodu:
Kod:
#include <Joystick.h>

#include <SPI.h>



// DFGT Shift Register pinleri

#define LOAD_PIN 4  // Yellow kablo (PL)

#define NUM_BUTTONS 24  // 3 adet 74HC165 x 8 bit



Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID,

                   JOYSTICK_TYPE_JOYSTICK,

                   NUM_BUTTONS, 0,

                   false, false, false,

                   false, false, false,

                   false, false, false);



void setup() {

  pinMode(LOAD_PIN, OUTPUT);

  digitalWrite(LOAD_PIN, HIGH);  // Yüksek başlasın



  SPI.begin();  // SPI başlat

  SPI.setClockDivider(SPI_CLOCK_DIV128);

  SPI.setDataMode(SPI_MODE0);

  SPI.setBitOrder(MSBFIRST);



  Joystick.begin();  // Joystick başlat

}



void loop() {

  digitalWrite(LOAD_PIN, LOW);

  delayMicroseconds(5);  // Load süresi

  digitalWrite(LOAD_PIN, HIGH);



  byte buttonBytes[3];

  for (int i = 0; i < 3; i++) {

    buttonBytes = SPI.transfer(0x00);

  }



  for (int byteIndex = 0; byteIndex < 3; byteIndex++) {

    for (int bitIndex = 0; bitIndex < 8; bitIndex++) {

      bool pressed = !(buttonBytes[byteIndex] & (1 << bitIndex));  // Aktif düşük

      int buttonNumber = byteIndex * 8 + bitIndex;

      Joystick.setButton(buttonNumber, pressed);

    }

  }



  delay(5);  // Yumuşak güncelleme

}
 
Son düzenleyen: Moderatör:
Teşekkürler hocam ama biraz test yaptım ve direksiyon tarafının kartı bozukmuş. Büyük ihtimalle satan kişide kurcalayıp yapamamış ki ortada kablo yok. Proje rafa kaldırıldı 😅
 

Technopat Haberler

Yeni konular

Geri
Yukarı