Stránka 1 z 1

Gamepad

Napsal: 28 úno 2020, 09:38
od jirka63
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);
}


Re: Gamepad

Napsal: 28 úno 2020, 10:40
od KamilV
Jak máš tlačítka zapojená? K jakým pinům?

Re: Gamepad

Napsal: 28 úno 2020, 11:53
od jirka63
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)

Re: Gamepad

Napsal: 28 úno 2020, 17:38
od jirka63
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 :)