Ciao a tutti, cercando in rete ho trovato uno sketch per trasformare un arduino Micro in Joystick, l'ho provato e funziona a meraviglia.
Mi piacerebbe usarlo con Microsoft Flight Simulator 2020 per comandare, tramite uno switch fisico, i vari interruttori virtuali del cockpit di un aereo.
Il problema che riscontro, però, è che se assegno su MFS2020 l'interruttore fisico , ad esempio, all'interruttore virtuale delle tax light, se abbasso la levetta del fisico anche sul cockpit virtuale dell'aereo si abbassa, se la rialzo, invece, quella virtuale resta abbassatta. Devo, quindi riabbasare la leva, per vederla alzare sul virtuale. In altre parole è come se l'interruttore virtuale non viene comandato da ogni singolo movimento della levetta dello switch reale, ma ogni due movimenti.
Ho letto in qualche discussione in inglese (che non mastico bene) che dipende dallo sketch di arduino e che modificandolo si risolve, qualcuno di voi riesce ad aiutarmi, indicandomi come intervenire? posso allegare lo sketch in questione o violo le regole del forum?
Ciao e grazie
Puoi? ... DEVI
Guglielmo
P.S.: : mi raccomando, come da regolamento, il codice, una volta inserito va TUTTO selezionato e va premuta l'icona </> nella barra degli strumenti per contrassegnarlo, appunto come codice. Inoltre, affinché sia ben leggibile, esso deve essere correttamente "indentato" ... questo lo si fa premendo ctrlT su un PC o cmd T su un Mac all'intero del IDE
Grazie Guglielmo, allego qui di seguito lo sketch:
/*
Clabit's usb_Botton Box v1.0
*/
#include <Keypad.h>
#include "Joystick.h"
#define ENABLE_PULLUPS
#define NUMBUTTONS 24
#define NUMROWS 6
#define NUMCOLS 4
//define the symbols on the buttons of the keypads
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}
};
byte rowPins[NUMROWS] = {6, 7, 8, 9, 10, 11};
byte colPins[NUMCOLS] = {2, 3, 4, 5,};
Keypad buttbx = Keypad( makeKeymap(buttons), rowPins, colPins, NUMROWS, NUMCOLS);
Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID, JOYSTICK_TYPE_JOYSTICK, 24, 0, true, true, true, true, true, true, false, false, false, false, false);
int zAxis_ = 0;
int RxAxis_ = 0;
int RyAxis_ = 0;
int RzAxis_ = 0;
//int Throttle_ = 0;
const bool initAutoSendState = true;
void setup() {
pinMode(A0, INPUT);
pinMode(A1, INPUT);
pinMode(A2, INPUT);
pinMode(A3, INPUT);
Joystick.begin();
}
void loop() {
CheckAllButtons();
zAxis_ = analogRead(A0);
zAxis_ = map(zAxis_, 0, 1023, 0, 255);
Joystick.setZAxis(zAxis_);
RxAxis_ = analogRead(A1);
RxAxis_ = map(RxAxis_, 0, 1023, 0, 255);
Joystick.setRxAxis(RxAxis_);
RyAxis_ = analogRead(A2);
RyAxis_ = map(RyAxis_, 0, 1023, 0, 255);
Joystick.setRyAxis(RyAxis_);
RzAxis_ = analogRead(A3);
RzAxis_ = map(RzAxis_, 1023, 0, 255, 0);
Joystick.setRzAxis(RzAxis_);
//Throttle_ = analogRead(A4);
//Throttle_ = map(Throttle_,1023,0,255,0);
//Joystick.setThrottle(Throttle_);
delay (50);
}
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;
}
}
}
}
}
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.