Tomi Soininen

Vinkkiä tarvitaan T7 valokytkinten hallintaan

21 viestiä aiheessa

Tervehdys

X-plane10

kone 777 pro versio

Tarvitsen vinkkiä miten koodata valokytkimet käyttöön, siis laskeutumis valot.. ym käytän teensy korttia ja ohjelmana arduino. saan kyllä valot toimimaan pelin sisällä, mutta kun lisään muita kytkimiä tai toimintoja niin ei toimi.

Koodit ja toiminnot toimivat eri sketsissä.

Jaa viesti


Link to post
Jaa muulla sivustolla

#include <Bounce.h>

 

const int laskurenkaat = (21,0);

const int laskeutumisvalo = (14, 10);

const int strobovalo = (18, 10);

const int taxivalo =  (17, 10);

const int radiomajakka = (16, 10);

const int navvalo =  (15, 10);

const int kasijarruon = (20,0);

 

 

FlightSimCommand Landingon; 

FlightSimCommand Landingoff;

FlightSimCommand strobelighton;

FlightSimCommand strobelightoff;

FlightSimCommand taxilightson;

FlightSimCommand taxilightsoff;

FlightSimCommand beaconligtson;

FlightSimCommand beaconligtsoff;

FlightSimCommand navlightson;

FlightSimCommand navlightsoff;

FlightSimCommand jarruon;

FlightSimCommand Laskuoff;

FlightSimCommand Laskuon;

 

 

void setup() {

 

  pinMode(14, INPUT_PULLUP);  // Valopaneeli pinit 14, 15, 16, 17, 18 jarru 20 laskurenkaat 21 

  pinMode(15, INPUT_PULLUP);

  pinMode(16, INPUT_PULLUP);

  pinMode(17, INPUT_PULLUP);

  pinMode(18, INPUT_PULLUP);

  pinMode(21, INPUT_PULLUP);

  pinMode(20, INPUT_PULLUP);

 

 

  Landingon = XPlaneRef("sim/lights/landing_lights_on"); 

  Landingoff = XPlaneRef("sim/lights/landing_lights_off");  // nimetyt pelikomennot

  strobelighton = XPlaneRef("sim/lights/strobe_lights_on");

  strobelightoff = XPlaneRef("sim/lights/strobe_lights_off");

  taxilightson = XPlaneRef("sim/lights/taxi_lights_on");

  taxilightsoff =XPlaneRef("sim/lights/taxi_lights_off");

  beaconligtson =XPlaneRef("sim/lights/beacon_lights_on");

  beaconligtsoff=XPlaneRef("sim/lights/beacon_lights_off");

  navlightson = XPlaneRef("sim/lights/nav_lights_on");

  navlightsoff = XPlaneRef("sim/lights/nav_lights_off");

  jarruon = XPlaneRef("sim/flight_controls/brakes_max");

  Laskuon = XPlaneRef("sim/flight_controls/landing_gear_down");

  Laskuoff = XPlaneRef("sim/flight_controls/landing_gear_up");

 

 

  }

 

void loop() {

  // eka lause loop:issa päivittää X-Planen

  FlightSim.update(); 

// kasijarruon.update();

   

 

  if (digitalRead(14) == LOW) {          // valopaneelin ohjaus koodit

}      Landingoff.once();

    if(digitalRead(14) == HIGH) {

      Landingon.once();

}   

 

    if (digitalRead(18) == LOW) {

}        strobelightoff.once();

      if(digitalRead(18) == HIGH) {

      strobelighton.once(); 

 

    if (digitalRead(17) == LOW) {

}      taxilightsoff.once();

    if(digitalRead(17) == HIGH) {

          taxilightson.once(); 

}

 

    if (digitalRead(15) == LOW) {

}        navlightsoff.once();

    if(digitalRead(15) == HIGH) {

        navlightson.once(); 

}

    if (digitalRead(16) == LOW) {

}        beaconligtsoff.once();

    if(digitalRead(16) == HIGH) {

      beaconligtson.once(); 

}

 

 

    if (digitalRead(21) == LOW) {

      Laskuon.once();

  }

    if(digitalRead(21) == HIGH) {

      Laskuoff.once();

  }

 

  if (digitalRead(20) == LOW ) {

      jarruon = 0;

  }

  if (digitalRead(20) == HIGH) {

    jarruon = 1;

  }

 

} ///////////

 

Kun lisään tämän koodit osat mukaan niin toimii miten sattuu.. ohjaimena pulssi potentiometri molemmat koodit toimii kun ovat eri sketseissä.

#include <Bounce.h>

 

Bounce nopeusylos = Bounce (0,10);

Bounce nopeusalas = Bounce (1,10);

 

FlightSimCommand ylos; 

FlightSimCommand alas;

 

void setup() {

 

  pinMode(0, INPUT_PULLUP);

  pinMode(1, INPUT_PULLUP);

 

  alas = XPlaneRef("777/spacial1");

  ylos = XPlaneRef("777/spacial2");

 

  }

 

  void loop() {

  // eka lause loop:issa päivittää X-Planen

  FlightSim.update(); 

// kasijarruon.update();

nopeusylos.update();

nopeusalas.update();

 

  if (nopeusylos.risingEdge()) {

      alas = 0;

  }

    if(nopeusylos.fallingEdge()) {

      alas = 1;

  }

  if (nopeusalas.risingEdge()) {

      ylos = 0;

  }

    if(nopeusalas.fallingEdge()) {

    ylos = 1;

}

  }

 

luulen että noi valokytkimet on väärin koodattu laittaa luupin jotenkin jumiin jatkuvalla toistolla...?

Jaa viesti


Link to post
Jaa muulla sivustolla

Morjens,

 

Pari tyhmää kysymystä alkuun:

 

Kun nuo kaksi ovat samassa scriptissä, niin eihän sulla ole setup tai void loop kahteen kertaan?

 

Sitten tuossa alla sulla on ihan selvä typo:

 

  if (digitalRead(14) == LOW) {          // valopaneelin ohjaus koodit

}       Landingoff.once();

    if(digitalRead(14) == HIGH) {

       Landingon.once();

}     

 

Tuohan siis ei voi toimia ollenkaan...

Tuon ekan IF:n sisältö on tyhjä, eli vaikka ehto olisi tosi, siellä ei suoriteta mitään...

Sensijaan suorittaa peräkkäin tuota ON ja OFF reffiä...

 

if (digitalRead(14) == LOW)   // valopaneelin ohjaus koodit

  {         

      Landingoff.once();

  }

 

if(digitalRead(14) == HIGH)

  {

      Landingon.once();

  }     

 

Tuolla lailla voisi jopa toimia, mutten ehdi kokeilla. Idea on kuitenkin niin, että {  toiminto näiden sisään  }   

 

Ja muuten tuota: FlightSim.update(); 

 

tarvitaan vaan jos halutaan tuoda X-Planesta tietoja Teensylle päin...  ;)

 

 

Jaa viesti


Link to post
Jaa muulla sivustolla

JEP

 

Yhdistän noi kaksi sketsiä yhteen lisäämllä vain tarvittavat rivit, ja kiitos vinkistä kokeilen tänään tota vaihtoehtoa. Kiitos

Jaa viesti


Link to post
Jaa muulla sivustolla

Täytyisi vielä kokeilla, mutta periaatteessa tuota switch koodia voisi yksinkertaistaa rajulla kädellä...

 

Jotenkin näin:

 

if (digitalRead(14) == LOW)           // valopaneelin ohjaus koodit

       Landingoff.once();

else Landingon.once();

 

Tässä sun koodissa on se vika, että se tuuttaa kokoajan tavaraa USB:tä pitkin X-Planelle, mikä ei ole järkevää.

Tuolla aikaisemmassa linkissä Baron 58 simussa on tehty hienosti toi inputtien luku: kytkimen tila lähetetään simulle vain jos se on muuttunut!

Tutustu siihen hieman...

 

Tähän tyyliin:

 

// Alku

FlightSimCommand Gen1On;

FlightSimCommand Gen1Off;

boolean in_check[50];  // Kytkimien kokonaismäärä

boolean in_read;     

 

 

void setup()

{

Gen1On = XPlaneRef("sim/electrical/generator_1_on");

Gen1Off = XPlaneRef("sim/electrical/generator_1_off");

for (int i = 38; i < 45; i++)  pinMode(i, INPUT_PULLUP);  // Pinnit 38,39,40,41,42,43 ja 45 ylösvetovastukset päälle

}

 

void loop()

{

for (int i = 38; i < 45; i++)

  {

   in_read = !digitalRead(i);

     if (in_read ^ in_check )     // --  switches position changed? (either to "0" or"1")

       {             

       switch (i)

         {

          case 45:

            {

                    // YOUR CODE HERE

            }

          break;

     

          case 44:             // Alternator1  switch 

            if (in_read)

              {

                Gen1 = 1;

              }

             if (!in_read)

              {

              Gen1 = 0;

              }

             

            break;     

         

          case 43:             // COM1 SWAP

            if (in_read)

              {

               int temp1 = Com1Sby;

               Com1Sby = Com1Active;

               Com1Active = temp1;

               PrintCom1Sby(Com1SbyOut);

               PrintCom1Active(Com1ActiveOut);

              }   

               break;     

         }

          in_check = in_read;

       }

 

  }

}

 

Noita case lauseita tehdään sitten sama määrä kuin pinnejä. Muuttuja i = pinni numero.

Toimii hienosti. Kokeile laittaa X-Planessa se Plugins -> Teensy -> show communication päälle, niin näet, että tällä hetkellä se sun Teensy tuuttaa kokoajan tavaraa simuun päin...  :thmbdn:

Jaa viesti


Link to post
Jaa muulla sivustolla

Jos auttaa niin samaa koodia voi soveltaa(kai) x-planessa katso links2fs multi radio koodi nini siinä aika hyvin käsittääkseni myöskin tehty tuo luku,nappien määrä,case valikot.

En niin hyvin tuota itse vielä ymmärrä kaikkea mutta saan link2fs+mega+fs9 toimimaan hienosti I2C LCD näytön kanssa radio paneelin ja kytkimet+ledit.

Kun tein uusiksi tuon LCD yhteyden I2C kanssa sopivaksi.

 

Seuraavaksi vaihdan LCD:n pois ja lisään 4-6 kpl max7219 8 digit 7-segmentit tilalle nini näyttää vähän aidommalta tuo radio stack torni sitten.

Kun nyt ensin sain testattua että toimii kaikki ja lisään annuincator panel kun löydän jostain värillistä kalvoa sinne tekstien taakse kun ledi syttyy niin punaista,keltaista,vihreää tekstiä näkyisi.

 

Jaa viesti


Link to post
Jaa muulla sivustolla

Kiitos vinkeistä, huomasin itsekkin juuri sen ongelman että teensy pukkaa koodia kokoajan x-planeen ja letokoneen valot on päällä vain siksi! kiitos koodivinkistä.

Jaa viesti


Link to post
Jaa muulla sivustolla

:'( tuota noin tässä on pienoinen ongelma, nämä koodit joita nyt koitin toimii kyllä muissa koneissa varsin hyvin, mutta ei 777 valot välkähtää mutta ei jää päälle. siis landinlights, strobo ym valot.

onko jollain tietoa miten homma hoidetaan x-plane10 apuna käyttäen teensy korttia koodit arduinolla. kytkin on on off sorttia siis vipukytkin kaksi  napainen toinen pin ja toinen maa. pin on digitall pin

kohta menee heeemo! kun ei homma etene. 

Jaa viesti


Link to post
Jaa muulla sivustolla

Onko tuo 777 joku lisäosa, vai ihan vakiokamaa?

 

EDIT: ja jos postaat koodia tänne, niin helpompi jelppiä :) Katoitko siitä communicationista mitä tapahtuu, kun kytkintä käännät?

Jaa viesti


Link to post
Jaa muulla sivustolla

kiitos katsoin mitä tapahtuu kun käännän vivusta 0 muuttuu 1 vain hetkeksi mutta palautuu takaisin nollaan!

 

tässä koodi yksi monista joita olen kokeillut toimii muissa koneissa mutta ei 777 joka on X-planen lisäosa proversio.

 

#include <Bounce.h>

 

 

FlightSimCommand Gen1On;

FlightSimCommand Gen1Off;

FlightSimCommand valoon;

FlightSimCommand valooff;

 

boolean in_check[50];  // Kytkimien kokonaismäärä

boolean in_read;   

 

 

void setup()

{

//Gen1On = XPlaneRef("sim/electrical/generator_1_on");

//Gen1Off = XPlaneRef("sim/electrical/generator_1_off");

valoon =  XPlaneRef("sim/lights/landing_lights_on"); // !! tämä koodi käytössä

valooff =  XPlaneRef("sim/lights/landing_lights_off");  // tämä koodi käytössä

for (int i = 14; i < 18; i++)  pinMode(i, INPUT_PULLUP);  // Pinnit 38,39,40,41,42,43 ja 45 ylösvetovastukset päälle

}

 

void loop()

{

  FlightSim.update();

 

for (int i = 14; i < 18; i++)

  {

  in_read = !digitalRead(i);

    if (in_read ^ in_check )    // --  switches position changed? (either to "0" or"1")

      {           

      switch (i)

        {

          case 14:

            if ( in_read)

            {

              valoon = 1;      // koodit

            }

            if(! in_read)

            {

              valooff = 1;

              }

             

             

          break;

   

          case 15:            // Alternator1  switch

            if (in_read)

              {

                Gen1On = 1;

              }

            if (!in_read)

              {

              Gen1Off = 0;

              }

           

            break;   

       

          case 43:            // COM1 SWAP

            if (in_read)

              {

            //  int temp1 = Com1Sby;

            //  Com1Sby = Com1Active;

            //  Com1Active = temp1;

            //  PrintCom1Sby(Com1SbyOut);

            //  PrintCom1Active(Com1ActiveOut);

              } 

              break;   

        }

          in_check = in_read;

      }

 

}

}

Jaa viesti


Link to post
Jaa muulla sivustolla

Äkkiseltään näyttäisi siltä että pitäisi toimia.

Mahtaako olla tuo dataref oikein...

 

Kokeileppa tuo:

 

FlightSimCommand valoon;

FlightSimCommand valooff;

 

boolean in_check[50];  // Kytkimien kokonaismäärä

boolean in_read;     

 

void setup()

{

Serial.begin(9600);

valoon =  XPlaneRef("sim/lights/landing_lights_on"); // !! tämä koodi käytössä

valooff =  XPlaneRef("sim/lights/landing_lights_off");  // tämä koodi käytössä

for (int i = 14; i < 18; i++)  pinMode(i, INPUT_PULLUP);  // Pinnit 38,39,40,41,42,43 ja 45 ylösvetovastukset päälle

}

 

void loop()

{

 

FlightSim.update();

   

for (int i = 14; i < 18; i++)

  {

   in_read = !digitalRead(i);

     if (in_read ^ in_check )     // --  switches position changed? (either to "0" or"1")

       {             

       switch (i)

         {

          case 14:

            if ( in_read)

             {

              valoon = 1;      // koodit

              Serial.println("kytkin ON");

             }

            if(! in_read)

             {

              valooff = 1;

              Serial.println("kytkin OFF");

             }

           break;

          }

          in_check = in_read;

       }

 

}

}

 

Ja laita serial monitor päälle, siitä pitäisi nähdä miten toimii...

Jos serial monitorissa lukee ihan ok Kytkin ON ja Kytkin OFF, mutta simu ei toimi oikein, niin se dataref ei ole oikein...

 

Jaa viesti


Link to post
Jaa muulla sivustolla

katsoin serial monitorilla ja kytkimet toimii oikein  :thmbup: Mutta pelissä on jotain pielessä... voisinko korvata olevassa olevan datareffin uudella, joka otetaan pelilevyltä?

Kiitos kaikille vinkeistä ja avusta jos on jokin hyvä idea miten saan toimimaan niin otetaan vinkit vastaan.

Jaa viesti


Link to post
Jaa muulla sivustolla

:o NO yritetty on ja ei vaan keksi enää mitään uutta juttua tämän tilanteen ratkaisuun, kun kirjoitan koodin niin toimii muissa koneissa mutta ei 777 jotenkin pitäisi saada simun sisällä oleva kytkin liikkumaan jotta arvo pysyisi 1 eikä palautuisi 0:llaan..

kun teensy editorilla kattelee niin kirjoittaa write.... 1 teksti keltaisella heti perään update.... 0 sinisellä ? kun kyseistä vipua liikuttaa simun sisällä niin lukee sinisellä update...1 ja valo syttyy ja toimii. jos jollain jotain jota voisi kokeilla.

kiitos!

 

Jaa viesti


Link to post
Jaa muulla sivustolla

Noniin, eli siis simu kirjoittaa sinun komennon yli heti perään... Kokeile kommentoida se flight sim update pois ja kokeile sitten. Toinen vaihtoehto on edelleen se että dataref on väärin...

Jaa viesti


Link to post
Jaa muulla sivustolla

Tuli kokeiltua, mutta jos otan komennon FlightSim.update(); pois niin teensy ei tee mitään varmaankin on jokin toinen komento jolla simu ymmärtää päivittää dataref:fin. täytyy koittaa löytää keino jolla ylipäätään saa homman toimimaan kunnolla. vika on todennäkösesti koodaajassa eli minussa. voin kyllä laittaa tänne ne datareffin rivit jotka muuttuu kun valokytkiä muuttaa on / off. kiitos avusta!!

Jaa viesti


Link to post
Jaa muulla sivustolla

Se salaisuus piilee nyt siellä T7 kansiossa. Oletko tutkinut sieltä dokumentaatiota?

Jaa viesti


Link to post
Jaa muulla sivustolla

Samassa ollaan edelleen. olen miettinyt miten saisin komennettua sen kytkimen liikkumaan pelin sisällä? jotenkin on nyt piilotettu ne komenniot jolla itse peli tekee toiminnot. T7 kansioon on kirjoitettu special comman jotka kyllä toimivat hyvinkin yksikertaisella koodilla ja tai vaikkapa peliohjaimen painikkeella, kun komennon antaa niin kytkimet liikkuvat pelin sisällä ohjaamossa. kun testailin tehdä koodin eri tavalla niin muissa koneissa toimii todella hyvin antaa komennon kerran ja esim valokytkin liikkuu ja valo jää päälle ja tietysti saa pois päältä eli on / off kytkin. alusta siis teensy kortti ja koodit arduino kirjastolla. Voin toki laittaa tanne ne dataref tiedoston ja muuta.

Jaa viesti


Link to post
Jaa muulla sivustolla

:laugh: Ongelma olikin niinkin yksin kertainen kuin komento navon = XPlaneRef("anim/130/button");

 

#include <Bounce.h>

 

Bounce navlightson = Bounce (15,10);

Bounce navlightsoff = Bounce (15,10);

 

FlightSimInteger navon; 

FlightSimInteger navoff;

 

void setup() {

  Serial.begin(9600);

  pinMode(15, INPUT_PULLUP);

 

 

  navon = XPlaneRef("anim/130/button");

  navoff = XPlaneRef("anim/130/button");

 

  }

 

  void loop() {

 

  FlightSim.update(); 

 

navlightson.update();

navlightsoff.update();

 

  if (navlightson.risingEdge()) {

      navon = 1;

      Serial.println("kytkin alas1");

  }

    if(navlightsoff.fallingEdge()) {

      navoff = 0;

    Serial.println("kytkin ylos1");

  }

 

  }

 

Testaan vielä ja koitan yksinkertaistaa koodia. Ei Mennyt kuin vuosi ettiessä ratkaisua! :thmbup:

Jaa viesti


Link to post
Jaa muulla sivustolla

No mutta hienoa, että ratkaisu löytyi! Nyt pääsee sitten koodaamaan ihan tosissaan  :thmbup:

Jaa viesti


Link to post
Jaa muulla sivustolla

Luo uusi käyttäjätunnus tai kirjaudu sisään

Sinun täytyy olla jäsen osallistuaksesi keskusteluun

Luo käyttäjätili

Rekisteröi uusi käyttäjätili helposti ja nopeasti!


Luo uusi käyttäjätili

Kirjaudu sisään

Sinulla on jo käyttäjätili?


Kirjaudu sisään