Gamepad

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
jirka63
Příspěvky: 3
Registrován: 28 úno 2020, 09:31
Reputation: 0

Gamepad

Příspěvek od jirka63 » 28 úno 2020, 09:38

Zdravím vespolek,

jal jsem se vytvářet herní ovladač (gamepad) k PC za pomoci Arduino Leonardo.
Celkem rychle jsem i jako totální začátečník pronikl do zapojení zařízení a naprogramování potenciometrů a joysticků.
Využíval jsem hlavně dostupné tutoriály, ale nepovedlo se mi do kódu přidat snímání tlačítek. Byl by prosím někdo ochotný mi dát radu jak na to, popřípadě doplnit co mám již hotové?
Níže přikládám můj kód.

Předem díky!!

Kód: Vybrat vše

//Joystick (A0, A1) - naklánění vpřed/vzad + vlevo/vpravo
//Pot1 (A2) - Přední brzda
//Pot2 (A3) - Plyn
//Pot3 (A4) - Zadní brzda
//Pot4 (A5) - Spojka
//Joystick (A6) - Řazení

#include <Joystick.h>

Joystick_ Joystick;

int xAxis_ = 0;
int yAxis_ = 0;
int zAxis_ = 0;          
int Throttle_ = 0;
int RxAxis_ = 0;
int RyAxis_ = 0;                     
int RzAxis_ = 0;          

const bool initAutoSendState = true; 

void setup()
{
      Joystick.begin();
  }
   
void loop(){
 

//DOPŘEDU - DOZADU
xAxis_ = analogRead(A1);  
xAxis_ = map(xAxis_,0,1023,0,1023);
 Joystick.setXAxis(xAxis_);  

//DOLEVA - DOPRAVA
yAxis_ = analogRead(A0);
 yAxis_ = map(yAxis_,0,1023,0,1023);
 Joystick.setYAxis(yAxis_);

//PŘEDNÍ BRZDA 
zAxis_ = analogRead(A2);  
zAxis_ = map(zAxis_,0,1023,0,1023);
 Joystick.setZAxis(zAxis_);  

//PLYN    
Throttle_ = analogRead(A3);
Throttle_ = map(Throttle_,550,0,1023,0);         
Joystick.setThrottle(Throttle_);  

//ZADNÍ BRZDA
RxAxis_ = analogRead(A4);
RxAxis_ = map(RxAxis_,0,500,0,1023);
Joystick.setRxAxis(RxAxis_);

//SPOJKA 
RyAxis_ = analogRead(A5);
RyAxis_ = map(RyAxis_,0,1023,0,1023);
Joystick.setRyAxis(RyAxis_);

//ŘAZENÍ
RzAxis_ = analogRead(A6);
RzAxis_ = map(RzAxis_,0,1023,0,1023);
Joystick.setRzAxis(RzAxis_); 
delay (50);
}


KamilV
Příspěvky: 479
Registrován: 03 dub 2018, 15:27
Reputation: 0
Bydliště: Olomouc

Re: Gamepad

Příspěvek od KamilV » 28 úno 2020, 10:40

Jak máš tlačítka zapojená? K jakým pinům?

jirka63
Příspěvky: 3
Registrován: 28 úno 2020, 09:31
Reputation: 0

Re: Gamepad

Příspěvek od jirka63 » 28 úno 2020, 11:53

Tlačítka mám zapojena k digitálním pinům 5, 6, 7.
GND -> tlačítko -> Arduino (dle návodu abych nemusel použít rezistor)

jirka63
Příspěvky: 3
Registrován: 28 úno 2020, 09:31
Reputation: 0

Re: Gamepad

Příspěvek od jirka63 » 28 úno 2020, 17:38

Už jsem to dopátral, takže koukám že jsem založil vlákno zbytečně.. Třeba to někomu v budoucnu pomůže.
Kód nyní vypadá takto:

Kód: Vybrat vše

//Joystick (A0, A1) - naklánění vpřed/vzad + vlevo/vpravo
//Pot1 (A2) - Přední brzda
//Pot2 (A3) - Plyn
//Pot3 (A4) - Zadní brzda
//Pot4 (A5) - Spojka
//Joystick (A6) - Řazení

#include <Joystick.h>

Joystick_ Joystick;

int xAxis_ = 0;
int yAxis_ = 0;
int zAxis_ = 0;          
int Throttle_ = 0;
int RxAxis_ = 0;
int RyAxis_ = 0;                     
int RzAxis_ = 0;          

const bool initAutoSendState = true; 

void setup()
{
  pinMode (2, INPUT_PULLUP);
      Joystick.begin();
  }
   
void loop(){
 
//TLAČÍTKO1
if (digitalRead(2)== LOW)
{Joystick.pressButton(1);}
else
{Joystick.releaseButton(1);}

//DOPŘEDU - DOZADU
xAxis_ = analogRead(A1);  
xAxis_ = map(xAxis_,0,1023,0,1023);
 Joystick.setXAxis(xAxis_);  

//DOLEVA - DOPRAVA
yAxis_ = analogRead(A0);
 yAxis_ = map(yAxis_,0,1023,0,1023);
 Joystick.setYAxis(yAxis_);

//PŘEDNÍ BRZDA 
zAxis_ = analogRead(A2);  
zAxis_ = map(zAxis_,0,1023,0,1023);
 Joystick.setZAxis(zAxis_);  

//PLYN    
Throttle_ = analogRead(A3);
Throttle_ = map(Throttle_,550,0,1023,0);         
Joystick.setThrottle(Throttle_);  

//ZADNÍ BRZDA
RxAxis_ = analogRead(A4);
RxAxis_ = map(RxAxis_,0,500,0,1023);
Joystick.setRxAxis(RxAxis_);

//SPOJKA 
RyAxis_ = analogRead(A5);
RyAxis_ = map(RyAxis_,0,1023,0,1023);
Joystick.setRyAxis(RyAxis_);

//ŘAZENÍ
RzAxis_ = analogRead(A6);
RzAxis_ = map(RzAxis_,0,1023,0,1023);
Joystick.setRzAxis(RzAxis_); 
delay (50);
}

Tímto způsobem se dá vytvořit vlastně jakýkoliv herní ovladač pro auto/moto/letecké simulátory a cokoliv dalšího :)

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 21 hostů