Výroba vlastního volantu Thrustmaster

Nedaří se vám s projektem a nenašli jste vhodné místo, kde se zeptat? Napište sem.
Pravidla fóra
Tohle subfórum je určeno pro konzultaci ucelených nápadů, popřípadě řešení komplexnějších projektů, které opravdu není možné rozdělit na menší části.
Většinu problémů jde rozdělit na menší a ptát se na ně v konkrétních subfórech.
Odpovědět
mazy85
Příspěvky: 6
Registrován: 16 kvě 2018, 15:51
Reputation: 0

Výroba vlastního volantu Thrustmaster

Příspěvek od mazy85 » 17 bře 2023, 10:31

:arrow: ÚVOD:
Dobrý den, po dlouhých hodinách méně úspěšných pokusů o vlastní modifikaci a pochopení projektů jiných, jsem se rozhodl požádat o radu. Internet jsem se snažil prozkoumat co to šlo a ke generování kodu a rad jsem zkoušel používat i moderní technologie strojového učení chatgpt. Řešení jsem se ale nedopátral a sám si nevím rady. Projekt je následující a týká se simracingu, takže pokud se zde najde člověk, který rád závodí na PC a rád se hrabe v elektronice a výrobě vlastních nástavců na oficiání základny výrobců PC volantů, bude to nejlepší kombinace člověka, který by mi mohl pomoct:

:arrow: POPIS PROBLÉMŮ:
Základna volantu je Thrustmaster T300, na kterou mám od výroby připojenou GT verzi volantu s rozhraním pro PS4. Během brouzdání jsem narazil na projekty zabývající se výrobou vlastních věnců na tuto základnu a jako bonus některé projekty využívaly oficiálního 6-pin konektoru pro připojení věnce k základně, takže odpadala dodatečná kabeláž pomocí externíxch USB. Takovéto řešení mne nadchlo a pustil jsem se v nedávné době do uskutečnění projektu. Volant jsem vyrobil a funguje na výbornou, jen se mi podle prvního projektu, podle kterého jsem potupoval, podařilo vyrobit stejné rozhraní jako má originální volatn, což bylo 15 aktivních tlačítek. Zde začlo pátrání po možnosti využití tlačítek většího počtu, protože vím, že thrustmaster vyrábí oficiální addon pro F1, který používá na stejném 6-pin konektoru kombinaci až ke 30-ti tlačítkám. I tento projekt na internetu už někdo řešil a revezrním inženýrstvím dokázal dotyčný do arduina dostat software, který perfektně dokáže simulovat volant F1 při připojení k základně. Projekty jsem na internetu na tenhle problém objevil 2, ale zde začíná můj požadavek na úpravu pro mne vyhovující, protože jeden projekt pracoval s jinou vývojovou deskou než mám já, druhý už pracoval s deskou která mne vyhovovala, ale volant měl přiliš pro mne zbytečných a nevyužitelných vychytávek. Nicméně jsem využil druhý z projektů a přes nepajivé pole jsem se ho pokusil replikovat na využití pouze tlačítek, což se mi částečně podařilo, jen mi volant hlásil trvale opakující se stračování tlačítka, což jsem ale zkusil přičíst možná špatným kontaktům v nepájivém poli. Nicméně jak jsem zmínil výše, projekt je pro mé účely zbytečně složitý a ambiciózní, proto jsem toužil pro jeho úpravu a zjednodušení, kde jsem skončil a obrátil se na Váš.

:?: POŽADAVEK NA ŘEŠENÍ:
Požadavek na emulování volantu Thrustmaster F1 wheel addon pro desku Arduino Nano ATmega328P. Víceméně mi pro začátek a otestování stačí k tomuto programu vytvořit v kodu matici na tlačítka 5sloupců a 5řádků, což podle mých počtů vychází na 25 tlačítek, které by pro můj volant měly stačit. K tlačítkám se ale pravděpodobně můsí v kodu přiřadit funkce podle kterých jsou asi namapována tlačítka na F1 wheel addonu (myslím tímto spíš nesrozumitelným vysvětlením, že každá pozice v matici má přiřazenou funki jako R1,L1,SELECT,R1,CROSS,TRIANGLE,....)

:arrow: ZÁVĚR:
Pokud by se zde našel člověk, který my s mým problémem uměl pomoct, byla by to pro mne spása, pokud by jste alespoň někdo věděl kam mne nasměrovat, budu určitě rád za každou pomoc, problém ovšem může být, že programování rozumím asi tak na úrovni 1z10 kdy umím rozeznat v kodu šedý text, kterým se většinou píšou poznámky...Proto budu potřebovat komunikaci jak s amatérem, za tohle se omlouvám a zároveň děkuji človeku, který se do toho semnou pustí.

:idea: ZDROJE ODKUD JSEM ČERPAL:
https://rr-m.org/blog/thrustmaster-t300 ... -emulator/ - projekt který jsem úspešně dokončil a je momentálně funkční
https://github.com/cdemetriadis/Thrustm ... l-Emulator - projekt ve kterém využívají Arduino Nano ATmega328P,
ale je zbytečně složitý
https://www.thingiverse.com/thing:5103880 - projekt ve kterém má řešení tlačítek víceméně tak jak potřebuji, až na ten ledbar, který také nechci,
ale používá jinou vývojovou desku, tuším Arduino Pro Micro s čipem ATMega32U4
:!: Kody pro arduino jsou v jednotivých projektech zvlášť, pokud by ale někdo věci z projektů přiložených nechtěl stahovat, můžu zaslat třeba na mail nebo pokud to jde přímo zde ve vláknu :!:

Uživatelský avatar
kiRRow
Příspěvky: 1151
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: Výroba vlastního volantu Thrustmaster

Příspěvek od kiRRow » 17 bře 2023, 17:06

Kód do příspěvku se vkládá pomocí tagu "code" (pátá ikonka zleva vypadá </>)
Co jsem tak rychle proletěl ten funkční a postavený kód, tak komunikuje to přes SPI sběrnici. Volant po tobě chce 8 bajtů v jakém je stavu na základě nějakého dotazu, který není popsán, v kódu je popsáno jen pár bitů v těch bajtech. Když zjistíš co který bit a bajt znamená, pak už nebude těžké nasnímat nějaký vstup, vytvořit z toho datový výstup a ten po SPI zaslat zpátky.

Je dosti možné, že ten první bajt popisuje jaký je typ zařízení a že má jen 16tlačítek, druhá strana tedy očekává další dva bajty se stavy jednotlivých tlačítek a zbytek pak bude vesele ignorovat, protože má to poslat sice 8x bajt, ale po přečtení toho prvního se to nastaví že ho zajímají jen ty další dva.

mazy85
Příspěvky: 6
Registrován: 16 kvě 2018, 15:51
Reputation: 0

Re: Výroba vlastního volantu Thrustmaster

Příspěvek od mazy85 » 17 bře 2023, 19:31

Děkuji za reakci, to co popisuješ a podle toho co jsem z toho pochopil, vypadá že dotyčný řeší v tomhle příspěvku: https://rr-m.org/blog/hacking-a-thrustm ... no-part-1/ angličtinou se překoušu, ale to je tak vše, jestli to v něčem pomůže vyřešit tento problém netuším.

Z kodu který se týka emulace volatnu F1 jsem okopíroval tohle, jestli chápu správně o čem si mluvil:

// the default wheel state
void resetWheelState() {
// Default Wheel State for the Thrustmaster F1
wheelState[0] = B11001111;
wheelState[1] = B11111111;
wheelState[2] = B11111111;
wheelState[3] = B11111111;
wheelState[4] = B00000000;
wheelState[5] = B00000000;
wheelState[6] = B01100000;
wheelState[7] = B01000000;
buttonValue = 0;

celý ten kod je vypsán na github kde se dá rozkliknout: https://github.com/cdemetriadis/Thrustm ... l_emulator

Uživatelský avatar
kiRRow
Příspěvky: 1151
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: Výroba vlastního volantu Thrustmaster

Příspěvek od kiRRow » 18 bře 2023, 11:18

Když se na to podíváš, tak oproti tomu prvnímu funkčnímu kódu je popsán navíc poslední bit prvního byte - je to stisk tlačítka GearUP a sám tvůrce poznamenává : "First 7 bits are constants, may be they encode the wheel type?"
A to bude možná problém, pokud se to zařízení bude hlásit jako tento typ (mám 17tlačítek), tak zbytek informací které pošle může být ignorován protože se nehlásí jako zařízení s 25ti tlačítky.

Jinak k té matici, máš 5řádků a 5sloupců ... je jedno co, ale dejme tomu že sloupce budou výstupy a řádky vstupy. Vždy pouze jeden výstup nastavíš na HIGH a ostatní na LOW a přečteš všech 5 řádků. Pokud víš že do 3tího výstupu pouštíš HIGH a přitom ho čteš na 4tém vstupu, pak můžeš říct že bylo stisknuto tlačítko na pozici matice [3,4] - problém nastává při stisku více tlačítek najednou.

Klávesnice počítače je taky zapojená do matice a pamatuji, že jako děti hrát počítačovou hru ve dvou na jedné klávesnici byl problém.

Uživatelský avatar
gilhad
Příspěvky: 778
Registrován: 07 bře 2018, 11:22
Reputation: 0

Re: Výroba vlastního volantu Thrustmaster

Příspěvek od gilhad » 18 bře 2023, 19:08

Proto se do série s těmi tlačítky zapojují diody, aby ten proud pak netekl kam nemá.
Obrázek

mazy85
Příspěvky: 6
Registrován: 16 kvě 2018, 15:51
Reputation: 0

Re: Výroba vlastního volantu Thrustmaster

Příspěvek od mazy85 » 23 bře 2023, 22:12

Podle všeho by vše co čem se bavíme měl řešit tento kod, jak už jsem ale v uplněm uvodu psal, je dělaný pro arduino micro, o kterém ale v jiném příspěvku psali, že pro využití spi se musí pájet někde přímo k procesoru a že to je dost nepohodlné pokud jsem to správně pochopil:
Arduino Micro doesn't have a SS pin (SS - SlaveSelect is needed for SPI communication) - so you'll need to solder a wire directly to the ATMega32u4 chip (and it's very tiny). The sketch requires an update as well (need to reconfigure pins). So - it's possible, but it's easier to get Nano.
nevím tedy zda dotyčný řešil kod jinak (nevyznám se v tom a tudíž to nepoznám) nebo jen šikovně pájel. Nicméně když jsem to zkoušel v Arduino IDE kompilovat pro arduino nano vypsalo to asi jen 3 červené řádky, pokud by jste si někdo kod stáhl a otevřel v Arduino IDE, možná by jste věděli co je tam špatně a jestli je to hračka předělat pro potřeby arduino nano a nebo by se to muselo postavit jinak :)

kod jsem přiložil jako přílohu
Přílohy
t300_f1_wheel_emulator_v1.ino
(18.65 KiB) Staženo 113 x

Uživatelský avatar
kiRRow
Příspěvky: 1151
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: Výroba vlastního volantu Thrustmaster

Příspěvek od kiRRow » 24 bře 2023, 15:18

Pošli i výpis, který ti to vyplivne při kompilaci. Celý, ne jen ty tři červené řádky.
Jinak v tom kódu je zajímavý ten popis 8byte komunikace - to se ti v budoucnu možná bude hodit :)

Kód: Vybrat vše

    B11010001,  // PS wheel specific
    B11111111,  // 7 Buttons plus one pad bit
    B11111111,   // 8 Buttons
    B11111111,  // Not Used
    B11111111,  // Not Used
    B11111111,  // Not Used
    B11111111,  // Not Used
    B11111111   // Not Used

    B11000001,  // Ferrari 458 wheel specific, and 1 Button
    B11111111,  // 8 Buttons
    B11111111,  // 8 Buttons
    B11111111,  // Not Used
    B11111111,  // Not Used
    B11111111,  // Not Used
    B11111111,  // Not Used
    B11111111   // Not Used

  // F1 has two encoders -> DIF and CHRG
    B11001111,  // 0 F1 wheel specific, and 5 Button
    B11111111,  // 1 8 Buttons
    B11111111,  // 2 8 Buttons
    B11111111,  // 3 DIFF and CHRG flags
    B00000000,  // 4 DIFF steps
    B00000000,  // 5 CHRG steps
    B01100000,  // 6 Not Used
    B01000000   // 7 Not Used

mazy85
Příspěvky: 6
Registrován: 16 kvě 2018, 15:51
Reputation: 0

Re: Výroba vlastního volantu Thrustmaster

Příspěvek od mazy85 » 27 bře 2023, 19:12

jo tak pokud se to snažím kompilovat pro to arduino nano, pro které bych to chtěl, vypíše mi to tyhle chyby:
C:\Users\Luky\Desktop\3D Tisk\THRUSTMASTER\Aliexpress_320mm_wheel_button_plate_2813599\files\t300_f1_wheel_emulator_v1\t300_f1_wheel_emulator_v1.ino: In function 'void setup()':
C:\Users\Luky\Desktop\3D Tisk\THRUSTMASTER\Aliexpress_320mm_wheel_button_plate_2813599\files\t300_f1_wheel_emulator_v1\t300_f1_wheel_emulator_v1.ino:261:3: error: 'DDRF' was not declared in this scope
DDRF &= ~B11110000; // Set pins A0, A1, A2 and A3 as input (set 0)
^~~~
C:\Users\Luky\Desktop\3D Tisk\THRUSTMASTER\Aliexpress_320mm_wheel_button_plate_2813599\files\t300_f1_wheel_emulator_v1\t300_f1_wheel_emulator_v1.ino:261:3: note: suggested alternative: 'WDRF'
DDRF &= ~B11110000; // Set pins A0, A1, A2 and A3 as input (set 0)
^~~~
WDRF
C:\Users\Luky\Desktop\3D Tisk\THRUSTMASTER\Aliexpress_320mm_wheel_button_plate_2813599\files\t300_f1_wheel_emulator_v1\t300_f1_wheel_emulator_v1.ino:262:3: error: 'PORTF' was not declared in this scope
PORTF |= B11110000; // Enable pull-up on A0, A1, A2, A3 (set 1)
^~~~~
C:\Users\Luky\Desktop\3D Tisk\THRUSTMASTER\Aliexpress_320mm_wheel_button_plate_2813599\files\t300_f1_wheel_emulator_v1\t300_f1_wheel_emulator_v1.ino:262:3: note: suggested alternative: 'PORT0'
PORTF |= B11110000; // Enable pull-up on A0, A1, A2, A3 (set 1)
^~~~~
PORT0
C:\Users\Luky\Desktop\3D Tisk\THRUSTMASTER\Aliexpress_320mm_wheel_button_plate_2813599\files\t300_f1_wheel_emulator_v1\t300_f1_wheel_emulator_v1.ino: In function 'void scanButtonMaxtrix(uint32_t&)':
C:\Users\Luky\Desktop\3D Tisk\THRUSTMASTER\Aliexpress_320mm_wheel_button_plate_2813599\files\t300_f1_wheel_emulator_v1\t300_f1_wheel_emulator_v1.ino:392:26: error: 'PINF' was not declared in this scope
uint32_t rowData = (~PINF >> 4) & 0x0F;
^~~~
C:\Users\Luky\Desktop\3D Tisk\THRUSTMASTER\Aliexpress_320mm_wheel_button_plate_2813599\files\t300_f1_wheel_emulator_v1\t300_f1_wheel_emulator_v1.ino:392:26: note: suggested alternative: 'PIN0'
uint32_t rowData = (~PINF >> 4) & 0x0F;
^~~~
PIN0

exit status 1

Compilation error: 'DDRF' was not declared in this scope

Uživatelský avatar
kiRRow
Příspěvky: 1151
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: Výroba vlastního volantu Thrustmaster

Příspěvek od kiRRow » 27 bře 2023, 20:51

Ten kód mi spíš příjde jako pro Atmegu2560 . Schválně ho zkompiluj pro arduino mega, jak to dopadne ...

mazy85
Příspěvky: 6
Registrován: 16 kvě 2018, 15:51
Reputation: 0

Re: Výroba vlastního volantu Thrustmaster

Příspěvek od mazy85 » 27 bře 2023, 21:13

tak to funguje taky :)

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: luger a 14 hostů