FSnordic.net
Home Help Rules Login Register
Welcome, Guest. Please login or register.
21.07.17, 18:45

Login with username, password and session length
+  FSnordic.net Forums
|-+  Finnish Discussion / Lentosimulaattorit
| |-+  Kotiohjaamot / Home Cockpits (Moderators: Jari Mikkilä, Joni Öfverström, Tuomas Kuosmanen)
| | |-+  Vinkkiä tarvitaan T7 valokytkinten hallintaan
:  

« previous thread next thread »
Pages: [1] 2 Reply Print
Author Topic: Vinkkiä tarvitaan T7 valokytkinten hallintaan  (Read 2562 times)
Tomi Soininen
Offline Offline

Posts: 14
Date Registered: 19.02.13

Vinkkiä tarvitaan T7 valokytkinten hallintaan
« on: 13.03.14, 12:47 »

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ä.
« Last Edit: 16.03.14, 13:58 by Tomi Soininen »
Mika Jylhä
Offline Offline

Posts: 266
Date Registered: 29.12.06

Re: Vinkkiä tarvitaan T7 valokytkinten hallintaan
« Reply #1 on: 13.03.14, 14:03 »

Laitappa koodia tänne tulemaan, niin katsotaan yhdessä. Itselläkin juuri Teensy ++ koodailut kiivaimmillaan Smiley

Mikä simu? X-plane?

Joko kävit katsomassa: http://b58.svglobe.com/code.html

T:Mika
Tomi Soininen
Offline Offline

Posts: 14
Date Registered: 19.02.13

Re: Vinkkiä tarvitaan T7 valokytkinten hallintaan tässä koodit
« Reply #2 on: 13.03.14, 15:39 »

#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...?
Mika Jylhä
Offline Offline

Posts: 266
Date Registered: 29.12.06

Re: Vinkkiä tarvitaan T7 valokytkinten hallintaan
« Reply #3 on: 13.03.14, 18:28 »

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...  Wink

« Last Edit: 13.03.14, 19:02 by Mika Jylhä »
Tomi Soininen
Offline Offline

Posts: 14
Date Registered: 19.02.13

Re: Vinkkiä tarvitaan T7 valokytkinten hallintaan
« Reply #4 on: 14.03.14, 05:54 »

JEP

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

Posts: 266
Date Registered: 29.12.06

Re: Vinkkiä tarvitaan T7 valokytkinten hallintaan
« Reply #5 on: 14.03.14, 06:41 »

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 [i])     // --  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 [i] = 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
Matti Virta
Offline Offline

Posts: 258
Date Registered: 04.03.13

Re: Vinkkiä tarvitaan T7 valokytkinten hallintaan
« Reply #6 on: 14.03.14, 07:22 »

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.
Tomi Soininen
Offline Offline

Posts: 14
Date Registered: 19.02.13

Re: Vinkkiä tarvitaan T7 valokytkinten hallintaan
« Reply #7 on: 14.03.14, 08:24 »

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

Posts: 14
Date Registered: 19.02.13

Re: Vinkkiä tarvitaan 777 valokytkimiin
« Reply #8 on: 14.03.14, 10:42 »

 Cry 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.   
Mika Jylhä
Offline Offline

Posts: 266
Date Registered: 29.12.06

Re: Vinkkiä tarvitaan T7 valokytkinten hallintaan
« Reply #9 on: 14.03.14, 11:06 »

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

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

Posts: 14
Date Registered: 19.02.13

Re: Vinkkiä tarvitaan T7 valokytkinten hallintaan
« Reply #10 on: 14.03.14, 11:16 »

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 [i])     // --  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 [i] = in_read;
       }

 }
}
Mika Jylhä
Offline Offline

Posts: 266
Date Registered: 29.12.06

Re: Vinkkiä tarvitaan T7 valokytkinten hallintaan
« Reply #11 on: 14.03.14, 12:26 »

Ä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 [i])     // --  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 [i] = 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...
« Last Edit: 14.03.14, 12:45 by Mika Jylhä »
Tomi Soininen
Offline Offline

Posts: 14
Date Registered: 19.02.13

Re: Vinkkiä tarvitaan T7 valokytkinten hallintaan
« Reply #12 on: 14.03.14, 14:45 »

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.
Olli Laine
Offline Offline

Posts: 354
Date Registered: 05.09.09

Re: Vinkkiä tarvitaan T7 valokytkinten hallintaan
« Reply #13 on: 14.03.14, 16:00 »

Moikka,

777 mukana tulee datarefs.txt, olisikohan tuosta apua.Löytyy koneen kansiosta.
Tomi Soininen
Offline Offline

Posts: 14
Date Registered: 19.02.13

Re: Vinkkiä tarvitaan T7 valokytkinten hallintaan
« Reply #14 on: 17.03.14, 13:25 »

 Shocked 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!
Mika Jylhä
Offline Offline

Posts: 266
Date Registered: 29.12.06

Re: Vinkkiä tarvitaan T7 valokytkinten hallintaan
« Reply #15 on: 17.03.14, 18:37 »

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...
Tomi Soininen
Offline Offline

Posts: 14
Date Registered: 19.02.13

Re: Vinkkiä tarvitaan T7 valokytkinten hallintaan
« Reply #16 on: 19.03.14, 06:49 »

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!!
Mika Jylhä
Offline Offline

Posts: 266
Date Registered: 29.12.06

Re: Vinkkiä tarvitaan T7 valokytkinten hallintaan
« Reply #17 on: 19.03.14, 16:29 »

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

Posts: 14
Date Registered: 19.02.13

Re: Vinkkiä tarvitaan T7 valokytkinten hallintaan
« Reply #18 on: 04.05.14, 10:30 »

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.
Tomi Soininen
Offline Offline

Posts: 14
Date Registered: 19.02.13

Re: Vinkkiä tarvitaan T7 valokytkinten hallintaan Ratkaistu!!
« Reply #19 on: 04.05.14, 16:30 »

 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
« Last Edit: 04.05.14, 16:41 by Tomi Soininen »
Pages: [1] 2 Reply Print 
« previous thread next thread »
Jump to:  

1