Cześć
To mój pierwszy post, więc witam serdecznie
Mam taki problem - zbudowałem sobie button box i zastosowałem dwa rodzaje przycisków (i tak chciałbym je wykorzystywać w grze) - bistabilne i monostabilne. Jestem w stanie zrobić, żeby wszystkie przyciski zachowywały się jak monostabilne lub wszystkie jako bistabilne. Jednak nie wiem w jaki sposób dojść do konkretnego przycisku. Komputer wykrywa button box jako gamepad z 45 przyciskami i wydawało mi się, że wystarczy się odwołać w pętli do konkretnego numeru przycisku, żeby zmienić jego zachowanie.
Mój kod na przyciski monostabilne:
Część kodu na przyciski bistabilne:
Wszystko byłoby git, ale jednak chcę mieć możliwość, żeby część przycisków działała jako bistabilne a część jako monostabilne. Miałem nadzieję, że jak chcę zaprogramować przyciski nr 5, 10, 36, 38 i 43 jako bistabilny to wystarczy wpisać:
Jednak tak się nie stało. i == 5 nie odwołuje się do przycisku nr 5. W jaki sposób odwołać się do tych przycisków?
Z góry dziękuję za pomoc.
To mój pierwszy post, więc witam serdecznie
Mam taki problem - zbudowałem sobie button box i zastosowałem dwa rodzaje przycisków (i tak chciałbym je wykorzystywać w grze) - bistabilne i monostabilne. Jestem w stanie zrobić, żeby wszystkie przyciski zachowywały się jak monostabilne lub wszystkie jako bistabilne. Jednak nie wiem w jaki sposób dojść do konkretnego przycisku. Komputer wykrywa button box jako gamepad z 45 przyciskami i wydawało mi się, że wystarczy się odwołać w pętli do konkretnego numeru przycisku, żeby zmienić jego zachowanie.
Mój kod na przyciski monostabilne:
Kod:
//BUTTON BOX 45 buttons
//Arduino Pro Micro
//Tested in WIN7 + ETS2
//V1.0
#include <Keypad.h>
#include <Joystick.h>
#define NUMBUTTONS 45
#define NUMROWS 9
#define NUMCOLS 5
byte buttons[NUMROWS][NUMCOLS] = {
{0,1,2,3,4},
{5,6,7,8,9},
{10,11,12,13,14},
{15,16,17,18,19},
{20,21,22,23,24},
{25,26,27,28,29},
{30,31,32,33,34},
{35,36,37,38,39},
{40,41,42,43,44},
};
byte rowPins[NUMROWS] = {21,20,19,18,15,14,16,10,9};
byte colPins[NUMCOLS] = {8,7,6,5,3};
Keypad buttbx = Keypad( makeKeymap(buttons), rowPins, colPins, NUMROWS, NUMCOLS);
Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID,
JOYSTICK_TYPE_JOYSTICK, 45, 0,
false, false, false, false, false, false,
false, false, false, false, false);
void setup() {
Joystick.begin();
}
void loop() {
CheckAllButtons();
}
void CheckAllButtons(void) {
if (buttbx.getKeys())
{
for (int i=0; i<LIST_MAX; i++)
{
if ( buttbx.key[i].stateChanged )
{
switch (buttbx.key[i].kstate) {
case PRESSED:
case HOLD:
Joystick.setButton(buttbx.key[i].kchar, 1);
break;
case RELEASED:
case IDLE:
Joystick.setButton(buttbx.key[i].kchar, 0);
break;
}
}
}
}
}
Część kodu na przyciski bistabilne:
Kod:
void CheckAllButtons(void) {
if (buttbx.getKeys())
{
for (int i=0; i<LIST_MAX; i++)
{
if ( buttbx.key[i].stateChanged )
{
switch (buttbx.key[i].kstate) {
case PRESSED:
Joystick.setButton(buttbx.key[i].kchar, 1);
break;
case HOLD:
case RELEASED:
Joystick.setButton(buttbx.key[i].kchar, 1);
delay(100);
Joystick.setButton(buttbx.key[i].kchar, 0);
case IDLE:
break;
}
}
}
}
}
Wszystko byłoby git, ale jednak chcę mieć możliwość, żeby część przycisków działała jako bistabilne a część jako monostabilne. Miałem nadzieję, że jak chcę zaprogramować przyciski nr 5, 10, 36, 38 i 43 jako bistabilny to wystarczy wpisać:
Kod:
void CheckAllButtons(void) {
if (buttbx.getKeys())
{
for (int i=0; i<LIST_MAX; i++)
{
if ( buttbx.key[i].stateChanged )
{
switch (buttbx.key[i].kstate)
{
case PRESSED:
if ( (i == 10) || (i == 5) || (i == 36) || (i == 43) || (i == 38) )
{
Joystick.setButton(buttbx.key[i].kchar, 1);
delay(100);
Joystick.setButton(buttbx.key[i].kchar, 0);
}
break;
case HOLD:
if ( (i != 10) && (i != 5) && (i != 36) && (i != 43) && (i != 38) )
{
Joystick.setButton(buttbx.key[i].kchar, 1);
}
break;
case RELEASED:
if ( (i == 10) || (i == 5) || (i == 36) || (i == 43) || (i == 38) )
{
Joystick.setButton(buttbx.key[i].kchar, 1);
delay(100);
Joystick.setButton(buttbx.key[i].kchar, 0);
}
break;
case IDLE:
if ( (i != 10) && (i != 5) && (i != 36) && (i != 43) && (i != 38) )
{
Joystick.setButton(buttbx.key[i].kchar, 0);
}
break;
}
}
}
}
}
Z góry dziękuję za pomoc.