SIOC-ohjelmointia (IOCards)

(1/13) > >>

tigert:
Teenpä tämmöisen threadin tähän, jos olette ko. koodia vääntäneet, näyttäkää spagettinne muillekin

Mä väänsin eilen tämän:



Suttuvideo: http://tigert.com/aviation/vatsim/cockpit-stuff/gearlever.3gp (realplayer tai quicktime player soittanee)

Ja se koodi Yritin kommentoida sopivasti sekaan..

Quote


// Aileron axis

Var 0001, Link FSUIPC_OUT, Offset $0BB6, Length 2 // Aileron variable, -16383 to 16383

Var 0101, Link IOCARD_ANALOGIC, Input #1, PosL 88, PosC 128, PosR 168 // Aileron pot,  in input 1.

{

  L0 = V0101 - 128 // pot values  are 0 to 255, we need -128 to 128

  V0001 = L0 * 128 //  multiply to scale: 128*128 = 16383

}



// Elevator axis

Var 0002, Link FSUIPC_OUT, Offset $0BB2, Length 2 // Elevator variable, -16383 to 16383

Var 0102, Link IOCARD_ANALOGIC, Input #2, PosL 20, PosC 95, PosR 170 // Elevator pot

{

  L0 = V0102 - 128

  V0002 = L0 * 128

}



// Throttle 1

Var 0003, Link FSUIPC_OUT, Offset $088c, Length 2 // Eng1 throttle, -4096 to 16383 (rev?)

Var 0103, Link IOCARD_ANALOGIC, Input #3, PosL 0, PosC 55, PosR 145 // Eng1 Throttle pot

{

  V0003 = V0103 * 65 // no reversers, so 0->16383
is enough. 65 so that it makes sure to have full power (a bit "too much" with max pot value)
}



// Throttle 2

Var 0004, Link FSUIPC_OUT, Offset $0924, Length 2 // Eng2 throttle, -4096 to 16384 (rev?)

Var 0104, Link IOCARD_ANALOGIC, Input #4, PosL 0, PosC 56, PosR 148 // Eng2 Throttle pot

{

  V0004 = V0104 * 65

}


// Gear lever
Var 0005, Link FSUIPC_OUT, Offset $0BE8, Length 4 // Landing gear position, 0=up, 16383=dwn

Var 0105, Link IOCARD_SW, Input 1 // Landing gear switch (ON=1, OFF=0)
{
  V0005 = V0105 * 16383
}

// Gear leds
Var 0113, Link IOCARD_OUT, Output 11     // "Gear in transit" led, in pins 11 of master card's output connector. Remember 330kOhm resistor!
Var 0114, Link IOCARD_OUT, Output 12     // Nosegear green led
Var 0010, Link FSUIPC_IN, Offset $0BEC, Length 4 // Nose gear position, 0=up, 16383=dwn (indicator)
{
  IF V0010 < 16383 // gear is not down
  {
    V0113 = 1 // transit led on
  }
  IF V0010 = 16383 // gear is fully down & locked
  {
    V0113 = 0 // transit led off
  }
  IF V0010 = 0 // nose gear is up
  {
    V0113 = 0 // transit led off
  }
  IF V0010 = 16383 // down & locked
  {
    V0114 = 1 // nosegear green
  }
  IF V0010 < 16383
  {
    V0114 = 0 // no green
  }
}

Var 0115, Link IOCARD_OUT, Output 13     // Right gear green led
Var 0011, Link FSUIPC_IN, Offset $0BF0, Length 4 // Right main gear position, 0=up, 16383=dwn
{
  IF V0011 = 16383
  {
    V0115 = 1
  }
  IF V0011 < 16383
  {
    V0115 = 0
  }
}

Var 0116, Link IOCARD_OUT, Output 14     // Left gear green led
Var 0012, Link FSUIPC_IN, Offset $0BF4, Length 4 // Left main gear position, 0=up, 16383=dwn
{
  IF V0012 = 16383
  {
    V0116 = 1
  }
  IF V0012 < 16383
  {
    V0116 = 0
  }
}


Semmoista.. Tuossa hetken kestää että tuon kanssa pääsee sinuiksi, mutta nyt alkaa tuntua hyvältä. Tuo koodi on melkoisen "vahvaa" siinä mielessä että sillä voi tehdä paljon erilaista logiikkaa. Tietty sen kirjoittelun kanssa menee aikaa, mutta teen niin että kolvaan johdot, kytken ja kirjoitan koodin ja testaan kytkimen. Toimii suht ok näin. Toinen vaihtoehto tietty on käyttää sitä "config iocard" -softaa, mutta sillä logiikan teko ei onnistu, ja nää on "joko tai" eli SIOC:ia päätin alkaa käyttää niin teen sillä sitten kaiken. Molempia ei näet voi käyttää kerralla.

Koodia varmaan voisi kirjoittaa "paremminkin" (en harrasta tai tee ohjelmointia työkseni) mutta tuo pelaa hyvin. Aika kätevä systeemi tuo on.

Jos kysyttävää on, tai omaa koodinpätkää tai vinkkiä, kertokaa se tähän. Tehdään tästä vaikka "SIOC-threadi".

//Tuomas

Jaketus:
Tämä treadi tulikin sopivaan kohtaan.

Itte olen väsännyt ruman, mutta toimivan laitteen, mutta koodaus ei ole vahvimpia puoliani.. (jos ei html koodia lasketa )

Voisiko joku lähettää meiliini koodin, joka näyttää seuraavaa:
Numero ledit 0-4 Alt, eli 5 numero näyttöä altille
Numero ledit 5-7 Hdg, eli 3 numero näyttöä hdgille
Numero ledit 8-10 IAS, eli 3 numero näyttöä IASsille..

Kiitos jo etukäteen.

tigert:
Quote

Tämä treadi tulikin sopivaan kohtaan.

Itte olen väsännyt ruman, mutta toimivan laitteen, mutta koodaus ei ole vahvimpia puoliani.. (jos ei html koodia lasketa )

Voisiko joku lähettää meiliini koodin, joka näyttää seuraavaa:
Numero ledit 0-4 Alt, eli 5 numero näyttöä altille
Numero ledit 5-7 Hdg, eli 3 numero näyttöä hdgille
Numero ledit 8-10 IAS, eli 3 numero näyttöä IASsille..

Kiitos jo etukäteen.


Mä en ole koodannut noita numeronäyttöjä vielä, mutta tuotas.. Katsotaas tätä koodia..

"FSUIPC for Programmers.doc" on se mistä näitä offsetteja katsotaan, sitä kauttahan toimii kaikki. Sieltä löytyy tämä:

OffsetLengthDescriptionFS2002FS200407D44Autopilot altitude value, as metres*65536OKOK
Eli, offsetti jonka osoite heksadesimaalina on 07d4 sisältää 4 yksikön mittaisen tiedon jossa on koodattuna koneen autopilottiin asetettu korkeus. Lukuarvo on metreinä ja kerrottuna 65536. Eli se pitää ensin jakaa 65536:lla ja muuntaa sitten jaloiksi. Eli kerrotaan vielä 0.3048:lla. Katsotaan sitten mitä siitä tulee. En ole ollenkaan varma toimiiko tämä, koska mulla ei vielä tosiaan ole numeronäyttöjä valmiina, mutta kokeile ja kerro.

Code:

Var 0002, Link IOCARD_DISPLAY, Digit 0, Numbers 5 // Tämä on meidän 5 7-segmenttiä alkaen nollasta..
Var 0001, Link FSUIPC_IN, Offset $07D4, Length 4 // AP:n korkeus, offsetti ja pituus, suoraan siitä dokkarista
{
// tämä on kommentti.
// Tässä hakasulkujen sisällä olevat jutut tehdään aina kun tuo ylläoleva, eli autopilotin korkeus,
// muuttuu. Eli teemme seuraavaa:
   L0 = V0001 / 65536 // jaetaan se sillä 65536:lla. Nyt L0 = ap:n korkeus metreinä.
   L0 = L0 * 0.3048 // metrit jaloiksi
   V0002 = L0 // Nyt sen pitäisi ilmestyä sinne numeroihin...?
}


Eli tallenna "testi.txt":ksi ja importoi tuo config_sioc:iin, tallenna jotta saat jotain.ssi:n. Sitten sioc.ini:iin sinne loppuun se jotain.ssi jotta se osaa ladata oikean filen. FS käyntiin ja sioc.exe päälle ja toivotaan parasta. Nyt voit kanssa käynnistää icopconsole.exe:n jolla voi kanssa katsoa mitä IOCardsin muuttujissa tapahtuu.

Kerro toimiiko tuo ollenkaan? Ja kerro tajuatko tuosta mitään? Tuo ei ole sillai vaikeaa ollenkaan, vaatii vaan miettimistä että logiikka menee oikein. Luultavasti tota joutuu viilaamaan jostain vähän mutta kerro tuleeko näyttöön yhtään mitään niin mietitään sitten lisää

//Tuomas

Jaketus:
Saan tuon toimivuuden testattua tänään (myöhään illalla) tai (todennäköisemmin) huomenna, olen juuri nyt mummolassa ...

Kyllähän tuosta jotain saa selvää...Näyttääpi paikoin jopa helpommalta kuin HTML...

tigert:
Quote

Saan tuon toimivuuden testattua tänään (myöhään illalla) tai (todennäköisemmin) huomenna, olen juuri nyt mummolassa ...

Kyllähän tuosta jotain saa selvää...Näyttääpi paikoin jopa helpommalta kuin HTML...


Jep, ei siinä ole mitään vaikeaa, ihan pelkkää logiikkaa ja perusjuttuja.

Ainoa ero normaaliin ohjelmointiin, esim PHP tai "oikeat" kielet, on se, ettei tuota systeemiä "ajeta" koskaan alusta loppuun, vaan koodi on "pätkissä" aina muuttujien yhteydessä. Eli näin:

V0001 ... määrittelyt, esim FSUIPC_IN tai iocardsin input tms..
{
   Tässä on koodin pätkä
}

Ja tuo koodin pätkä siis ajetaan silloin kun tuo muuttuja V0001 muuttaa arvoaan (eli jos se on FSUIPC:stä, simussa ko. parametri muuttuu, tai jos se on esim. iocardsin kytkin, kun se kytketään päälle tai pois..)

Koodissa voidaan sitten tutkia muiden muuttujien tilaa jne. Onneksi seuraavaan versioon SIOCista tulee mahdollisuus käyttää ihan järkeviä nimiä noille, eikä pelkästään numeroita.

Mutta tällä pystyy tekemään aikamoisia juttuja. Esim. niin että määrittelet vaikkapa varoitusvaloja eri asioille, low fuel, low voltage jne. Ja sitten yhden napin, joka on "light test" - ja joka varoitusvalon koodinpätkässä sitten katsotaan FSUIPC:stä onko esim. polttoainetta tietty määrä, jos on sen alle, sytytetään valo. Kaikki varoitusvalojen ledit voidaan sitten sytyttää myös "light test" kytkimen koodissa kun kytkintä painetaan.

//Tuomas

Navigation

Up one level

Next page