quinta-feira, 12 de outubro de 2017

Resolvido Link2fs com PMDG ou Wilco ou qualquer outra aeronave fs2004 com Arduino

Olá pessoal

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;
  }              
}



https://www.youtube.com/watch?v=9_B5ija21-o


4 comentários:

  1. Olá amigo. tudo bem? Muito bacana seu post. Se puder me dar uma ajuda em uma dúvida. Qual programa você está usando para recolher aquelas teclas da imagem 4 do seu post. Vi que tem algo de PMDG Keyboarding.... Aquela janelinha com os atalhos. O que seria aquilo. Eu uso aqui fsx e windows 7 - Desde já agradeço.

    ResponderExcluir
    Respostas
    1. Opa boa noite, desculpe não responder antes só vi agora, essa janela quando vc instala o pmdg está disponivel, é na hora que vc vai definir alguma tecla tipo push back

      Excluir
  2. Vou deixar meu e-mail caso possa me responder. jefmachia@gmail.com

    ResponderExcluir
  3. ola poderia enviar o projeto dos pinos por email sou iniciante no arduino apesar de ter conhecimento em eletrônica. bayardtec@gmail.com

    ResponderExcluir