Se você tentou usar o Link2fs com o PMDG deve ter ficado frustado pois o link2fs na sua configuração padrão só funciona com a aeronaves Padrão do simulador. Mas é possível usar o Link2fs com o PMDG ou outra aeronave que você instalou.
Enfim eu consegui e gostaria de compartilhar com vocês como usar o link2fs com o PMDG ou qualquer outra aeronave com o arduino.
Leia tudo com muita atenção que é muito importante para você fazer o seu Home cockpit.
Meu primeiro MCP funcional.
Primeiro Passo - lembre-se que existe uma tecla para cada comando que você quiser fazer no simulador. e se não tiver você pode fazer uma macro.
https://www.youtube.com/watch?v=__of5EEZzvc
Seguindo desse principio utilizaremos o Link2fs na parte de Key. conforme imagem abaixo.
Vejamos o exemplo do PMDG a tecla de atalho para Increase Curso é CTRL+SHIFT+D
Agora vamos usar essa informação para acionarmos qualquer comando do simulador.
ATENÇÃO AGORA!!
Não esqueça que dependendo da Versão do windows que vocês está usando talvez seja necessário executar o Link2fs como administrador e com modo de compatibilidade do Windows Vista.
1 - clicar em ENTER PROGRAMER MODE
2 - indicar qual o pino do arduino que você quer usar por exemplo o pino 7 do arduino será escrito como 07.
3 - Inserir as teclas referentes para executar o comando
veja que a imagem acima CTRL+SHIFT+D é igual a D070 que é o pino 7 do arduino, então quando eu pressionar o botão ligado no pino 7 eu imprimo D070. Veja no código Abaixo.
agora o código do arduino para encoder e botões que.
Depois é só fazer os ajustes necessários.
// encoder 1
unsigned long currentTime;
unsigned long lastTime;
//encoder 2
unsigned long currentTime1;
unsigned long lastTime1;
//encoder 3
unsigned long currentTime2;
unsigned long lastTime2;
// encoder
const int pinA = 3; // número do pino
const int pinB = 4;
const int pinC = 8;
const int pinD = 9;
const int pinE = 11;
const int pinF = 12;
// Storing the readings
boolean encA;
boolean encB;
boolean lastA = false;
boolean encC;
boolean encD;
boolean lastC = false;
boolean encE;
boolean encF;
boolean lastE = false;
// BOTÃO SPEED
int botao = 2;
int estado_do_botao = 0;
int valor_atual = 1;
// BOTÃO VER SPEED
int botao1 = 10;
int estado_do_botao1 = 0;
int valor_atual1 = 1;
// BOTÃO APP
int botao2 = 7;
int estado_do_botao2 = 0;
int valor_atual2 = 1;
// BOTÃO VNAV
int botao3 = 5;
int estado_do_botao3 = 0;
int valor_atual3 = 1;
// BOTÃO LNAV
int botao4 = 6;
int estado_do_botao4 = 0;
int valor_atual4 = 1;
// BOTÃO CMD A
int botao5 = 13;
int estado_do_botao5 = 0;
int valor_atual5 = 1;
void setup()
{
pinMode(pinA, INPUT_PULLUP);
pinMode(pinB, INPUT_PULLUP);
pinMode(pinC, INPUT_PULLUP);
pinMode(pinD, INPUT_PULLUP);
pinMode(pinE, INPUT_PULLUP);
pinMode(pinF, INPUT_PULLUP);
pinMode(botao, INPUT_PULLUP);
pinMode(botao1, INPUT_PULLUP);
pinMode(botao2, INPUT_PULLUP);
pinMode(botao3, INPUT_PULLUP);
pinMode(botao4, INPUT_PULLUP);
pinMode(botao5, INPUT_PULLUP);
currentTime = millis();
lastTime = currentTime;
currentTime1 = millis();
lastTime1 = currentTime1;
currentTime2 = millis();
lastTime2 = currentTime2;
Serial.begin(115200);
}
void loop()
{
// BLOCO DO BOTÃO SPEED
estado_do_botao = digitalRead(botao); //Armazena o Estado do botão.
if ((estado_do_botao == LOW) && (valor_atual == 1))
{
Serial.println("D020"); //d020 se refere ao pino 2 do arduino usado no link2fs
delay(200);
valor_atual = 0;
estado_do_botao = 1;
}
if ((estado_do_botao == LOW) && (valor_atual == 0))
{
Serial.println("D020");
delay(200);
valor_atual = 1;
estado_do_botao = 0;
}
// BLOCO DO BOTÃO VERTICAL SPEED
estado_do_botao1 = digitalRead(botao1); //Armazena o Estado do botão.
if ((estado_do_botao1 == LOW) && (valor_atual1 == 1))
{
Serial.println("D100");
delay(200);
valor_atual1 = 0;
estado_do_botao1 = 1;
}
if ((estado_do_botao1 == LOW) && (valor_atual1 == 0))
{
Serial.println("D100");
delay(200);
valor_atual1 = 1;
estado_do_botao1 = 0;
}
// BLOCO DO BOTÃO APP
estado_do_botao2 = digitalRead(botao2); //Armazena o Estado do botão.
if ((estado_do_botao2 == LOW) && (valor_atual2 == 1))
{
Serial.println("D070");
delay(200);
valor_atual2 = 0;
estado_do_botao2 = 1;
}
if ((estado_do_botao2 == LOW) && (valor_atual2 == 0))
{
Serial.println("D070");
delay(200);
valor_atual2 = 1;
estado_do_botao2 = 0;
}
// BLOCO DO BOTÃO VNAV
estado_do_botao3 = digitalRead(botao3); //Armazena o Estado do botão.
if ((estado_do_botao3 == LOW) && (valor_atual3 == 1))
{
Serial.println("D060");
delay(200);
valor_atual3 = 0;
estado_do_botao3 = 1;
}
if ((estado_do_botao3 == LOW) && (valor_atual3 == 0))
{
Serial.println("D060");
delay(200);
valor_atual3 = 1;
estado_do_botao3 = 0;
}
// BLOCO DO BOTÃO LNAV
estado_do_botao4 = digitalRead(botao4); //Armazena o Estado do botão.
if ((estado_do_botao4 == LOW) && (valor_atual4 == 1))
{
Serial.println("D060");
delay(200);
valor_atual4 = 0;
estado_do_botao4 = 1;
}
if ((estado_do_botao4 == LOW) && (valor_atual4 == 0))
{
Serial.println("D060");
delay(200);
valor_atual4 = 1;
estado_do_botao4 = 0;
}
// BLOCO DO BOTÃO CMD A
estado_do_botao5 = digitalRead(botao5); //Armazena o Estado do botão.
if ((estado_do_botao5 == LOW) && (valor_atual5 == 1))
{
Serial.println("D130");
delay(200);
valor_atual5 = 0;
estado_do_botao5 = 1;
}
if ((estado_do_botao5 == LOW) && (valor_atual5 == 0))
{
Serial.println("D130");
delay(200);
valor_atual5 = 1;
estado_do_botao5 = 0;
}
// PRIMEIRO BLOCO IAS 3/4 ENCODER
currentTime = millis();
if (currentTime >= (lastTime + 5)) {
encA = digitalRead(pinA);
encB = digitalRead(pinB);
if ((!encA) && (lastA)) {
if (encB){ Serial.println("D030");}else{Serial.println("D040");}
}
lastA = encA;
lastTime = currentTime;
}
// SEGUNDO BLOCO ALT 8/9 ENCODER
currentTime1 = millis();
if (currentTime1 >= (lastTime1 + 5))
{
encC = digitalRead(pinC);
encD = digitalRead(pinD);
if ((!encC) && (lastC)){
if (encD){Serial.println("D080");}else{Serial.println("D090");}
}
lastC = encC;
lastTime1 = currentTime1;
}
// TERCEIRO BLOCO VS 11/12
currentTime2 = millis();
if (currentTime2 >= (lastTime2 + 5))
{
encE = digitalRead(pinE);
encF = digitalRead(pinF);
if ((!encE) && (lastE)){
if (encF){Serial.println("D110");}else{Serial.println("D120");}
}
lastE = encE;
lastTime2 = currentTime2;
}
}