Pinwaardes veranderen

Arduino specifieke Software
Berichten: 15
Geregistreerd: 03 Mei 2019, 15:07

Pinwaardes veranderen

Berichtdoor Karabas » 18 Aug 2019, 09:36

Ik heb een game controller gebouwd met een Arduino Leonardo. Deze bestaat uit een versnellingspook (H-Shifter), 7 schakelaars en een koppelingspedaal. Het geheel wordt gebruikt in combinatie met een stuur van Logitech voor simulatie games.

Sommige simulatie-games herkennen hem echter niet als een aparte controller waardoor de waardes in de settings van de sim overeen komen met schakelaars van het stuur.

Ik zoek nu een mogelijkheid om de digitale pin waardes van de Leonardo uit te breiden met b.v. een H (van H-shifter), dus H0 t/m H13, of te verhogen met b.v. 40, dus 40 t/m 53. Hierdoor hoop ik dan een echte uitbreiding en geen overlapping van het stuur te krijgen.

Ik maak gebruik van de onderstaande standaard joystick sketch.

Wie kan mij helpen?
Alvast bedankt voor het meedenken,

Fer





#include "Joystick.h"

Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID,JOYSTICK_TYPE_GAMEPAD,
14, 0, // Button Count, Hat Switch Count
false, false, true, // X and Y, but no Z Axis
true, true, true, // Rx, Ry, or Rz
false, true, // rudder or throttle
true, false, false); // accelerator, brake, or steering

// declare variables
int axe1Value;
int axe2Value;
int axe3Value;
int axe4Value;
int axe5Value;
int axe6Value;


// init joystick libary
void setup() {
// Initialize Button Pins
pinMode(0, INPUT_PULLUP);
pinMode(1, INPUT_PULLUP);
pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);
pinMode(4, INPUT_PULLUP);
pinMode(5, INPUT_PULLUP);
pinMode(6, INPUT_PULLUP);
pinMode(7, INPUT_PULLUP);
pinMode(8, INPUT_PULLUP);
pinMode(9, INPUT_PULLUP);
pinMode(10, INPUT_PULLUP);
pinMode(11, INPUT_PULLUP);
pinMode(12, INPUT_PULLUP);
pinMode(13, INPUT_PULLUP);
//pinMode(A0, INPUT_PULLUP);
pinMode(A1, INPUT_PULLUP);
pinMode(A2, INPUT_PULLUP);
pinMode(A3, INPUT_PULLUP);
pinMode(A4, INPUT_PULLUP);
pinMode(A5, INPUT_PULLUP);

// Initialize Joystick Library
Joystick.begin();
}

// Constant that maps the phyical pin to the joystick button.
const int pinToButtonMap = 0;

// Last state of the button
int lastButtonState[14] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0};

void loop() {
// Axe 1
axe1Value = analogRead(A0);
Joystick.setThrottle(map(axe1Value,180,880,0,1023));
Serial.println(axe1Value); // print analog value
delay(1);

// Axe 2
axe2Value = analogRead(A1);
Joystick.setZAxis(map(axe2Value,600,880,0,1023));
delay(1);

// Axe 3
axe3Value = analogRead(A2);
Joystick.setRxAxis(axe3Value);
delay(1);

// Axe 4
axe4Value = analogRead(A3);
Joystick.setRyAxis(axe4Value);
delay(1);

// Axe 5
axe5Value = analogRead(A4);
Joystick.setRzAxis(axe5Value);
delay(1);

// Axe 6
axe6Value = analogRead(A5);
Joystick.setAccelerator(axe6Value);
delay(1);


// Read pin values
for (int index = 0; index < 14; index++)
{
int currentButtonState = !digitalRead(index + pinToButtonMap);
if (currentButtonState != lastButtonState[index])
{
Joystick.setButton(index, currentButtonState);
lastButtonState[index] = currentButtonState;
}
}

delay(50);
}

Advertisement

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Pinwaardes veranderen

Berichtdoor shooter » 18 Aug 2019, 11:54

allereerst RTFM ofwel lees hoe de library werkt.
je zet namelijk een hele hoop info direct naar de library dus je kan elke ingang iets anders laten doen .
Je moet het vooral zoeken in je joystick type en de communicatie naar je computer want elke waarde zoals Rx wordt naar je computer gestuurd, en dit kun je allemaal veranderen. Het makkelijkste lijkt mij de library veranderen en er zelf jouw commandos in te zetten.
paul deelen
shooter@home.nl

Berichten: 15
Geregistreerd: 03 Mei 2019, 15:07

Re: Pinwaardes veranderen

Berichtdoor Karabas » 18 Aug 2019, 15:25

Dank voor je snelle reactie. Ik denk echter dat het aanpassen van de library niet voor mij weg gelegd is. Ik ben nl maar een nieuwkomer met Arduino. Maar dat moet toch eenvoudiger kunnen lijkt mij? Is het niet mogelijk om in de void setup() bv elke pin een (andere) waarde toe te kennen o.i.d.? Wellicht denk ik wat te simpel maar een oplossing zit soms in een klein hoekje.

Fer

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Pinwaardes veranderen

Berichtdoor shooter » 19 Aug 2019, 12:19

Lees de laatste regels van het programma maar eens, daar worden alle digitale pinnen met een for loop direct gelezen en naar een array gezet .
Je kunt die for loop uit elkaar halen en dan elke digitalRead naar een andere arrayplaats laten wijzen, maar dan moet je wel opgeven welke pinnen je wilt hebben.
dan krijg je dus iets als
cpp code
int pinnumber[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13};
for (int index = 0; index < 14; index++)
{
int currentButtonState = !digitalRead(pinnumber[index]);
if (currentButtonState != lastButtonState[index])
{
Joystick.setButton(index, currentButtonState);
lastButtonState[index] = currentButtonState;
}
}

die definitie mag dus ook buiten de loop want dat is wat sneller, en dan kun je dus de pinnummers veranderen naar wat je wilt. De analoge pinnen zijn van A0 af en dat kan je in het programma gelijk doen.
paul deelen
shooter@home.nl

Berichten: 15
Geregistreerd: 03 Mei 2019, 15:07

Re: Pinwaardes veranderen

Berichtdoor Karabas » 24 Aug 2019, 13:55

Hoi Paul,

Bedankt voor je advies. Momenteel ben ik op vakantie maar na de vakantie ga mij ik er in verdiepen. Hopelijk kan ik hier iets mee.

Fer

Berichten: 15
Geregistreerd: 03 Mei 2019, 15:07

Re: Pinwaardes veranderen

Berichtdoor Karabas » 28 Sep 2019, 11:28

Helaas is het mij nog niet gelukt om de code aan te passen. Ik ben er echter inmiddels achter dat het probleem zich alleen maar bij 1 sim game voor deed. Andere games kunnen wel om gaan met meerdere controllers.

In elk geval bedankt voor de hulp. Ik heb nog een project(je) op stapel staan dus indien nodig kom ik hier graag nog een keertje terug. Helaas ben ik (nog) niet bij machte om anderen te helpen met Ardino code problemen.

Fer

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 17 gasten