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
Burada tutulan kablo bende yok
Pinout tablosunu yabancı bir siteden buldum
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:
Bendeki DFGT 6 pinli soket bu şekilde boşta
Burada tutulan kablo bende yok
Pinout tablosunu yabancı bir siteden buldum
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: