Serijinis ryšys su apdorojimu

Serijinis ryšys su apdorojimu

Serijinis ryšys su apdorojimu

Serijinė klasė

Serijinio ryšio naudojimo operacijos Apdorojimas yra apibrėžti klasėje Serial.Pirmoji operacija, kurią reikia atlikti norint juos naudoti programoje (eskizas) bus įtraukti jį į kodą su import processing.serial.*;.

Turinys

    Klasė Serial Jame yra penki skirtingi konstruktoriai, priklausomai nuo nurodytų parametrų. Vienintelis būtinas parametras yra pirminis objektas (tėvas), kuri paprastai atitinka pagrindinę klasės programą (tarkime, programos langą). PApplet. Paprastai rašoma programa bus tėvas ( eskizas srovė), šio pirmojo privalomo parametro reikšmė bus this.

    Kiti penki parametrai, kuriuos galima perduoti konstruktoriui, yra ① greitis, ② nuosekliojo prievado pavadinimas ③ paritetas naudojami protokole, ④ duomenų bitai ir ⑤ stop bitai. Dažniausiai perduodami parametrai, be reikalingo pirminio objekto, yra prievado pavadinimas ir greitis.

    La nuosekliojo ryšio greitis yra sveikasis skaičius (int) Tai numatytoji reikšmė yra 9600 jei šis parametras konstruktoriui neperduodamas.

    Galimi nuoseklieji prievadai. Sąrašo metodas

    El uosto pavadinimas turi sistemos nustatytą formą tokiu būdu, pavyzdžiui, in „Linux“ paskirstymai bus kažkas panašaus /dev/ttyS4 / dev / ttyACM3 o /dev/ttyUSB1 (priklausomai nuo prievado tipo), o „Windows“ tai bus kažkas panašaus COM12. Jei prievadas nėra fiziškai susietas su įrenginiu, programa paprastai nežinos, kurį prievadą naudoti. Įprastas būdas pasirinkti prievadą yra gauti galimų prievadų sąrašą, parodyti jį vartotojui ir leisti pasirinkti tą, kurį nori naudoti. Metodas Serial.list() grąžina teksto eilučių vektorių (String) su sistemoje galimų prievadų pavadinimais.

    Prievadas, kurį pagal numatytuosius nustatymus naudoja biblioteka Serial yra pirmasis iš grąžinamų metodu list (tikrai COM1 „Windows“ arba „Windows“ /dev/ttyS0 en GNU / Linux). Išskyrus labai ribotus atvejus, kai aparatinė įranga, su kuria dirbama, yra griežtai žinoma (pvz., sistema kiosko režimu), ji paprastai nepraleidžiama, o paskirties prievadas yra aiškiai nurodytas.

    Apdorojamas nuoseklusis Linux Serijinio sąrašo prievadas ttyACM ttyS ttyUSB

    Aukščiau pateikta ekrano kopija rodo sistemos išvestį GNU / Linux kuris turi keturis nuosekliuosius prievadus RS-232 (ttyS0 a ttyS3) ir penki dviejų tipų adapteriai (ttyACM0 a ttyACM1 y ttyUSB0 a ttyUSB2).

    „Linux“ serijinių įrenginių leidimai ttyACM ttyS ttyUSB

    Kad galėtų pasiekti nuosekliuosius prievadus, vartotojas turi priklausyti grupei, kuriai sistema juos priskiria, paprastai tty o skambinti. Aukščiau esančio vaizdo ekrano kopijoje matote, kad nuoseklieji prievadai yra išvardyti su ls /dev/tty[ASU]* -la priklauso grupei skambinti kuri turi skaitymo ir rašymo prieigos prie jų leidimus.

    Serijinio protokolo parametrai

    La paritetas serijinio ryšio yra išreikšta Apdorojimas kaip personažas (char), kuris gali įgauti reikšmes: ① N (nė vienas), kad neaptiktumėte paritetas, ② E (net) nurodyti, kad pariteto bitas yra lygus, ③ O (nelyginis) nurodyti, kad pariteto bitas yra nelyginis, ④ M (ženklas), kad visada padarytumėte pariteto bitas ir ⑤ S (erdvė), kad visada būtų vienas pariteto bitas. Numatytoji reikšmė, jei neperduota konstruktoriui kaip parametras, yra N (be paritetas).

    Apie numeris duomenų bitai, kuris pagal numatytuosius nustatymus yra aštuoni, nurodo bitų, sudarančių grynąjį naudingąjį duomenų kiekį (vadinamas simboliu arba kartais žodžiu), kuris perduodamas kiekviename pagrindiniame kadro vienete, skaičių. Duomenų bitų skaičių nurodantis parametras išreiškiamas sveikuoju skaičiumi (int).

    Galiausiai penktasis galimas parametras nurodo galutinio pažymio trukmę, išreikštą kaip stop bitai (stop bitai), kuris nurodomas kaip skaičius, pavaizduotas slankusis kablelis (float), kuris gali priimti vertes 1.0 (numatytoji reikšmė, jei parametras neperduodamas konstruktoriui), 1.5, arba 2.0.

    Serijinės klasės konstruktoriai

    Šiame sąraše rodomi skirtingi parametrų deriniai, kuriuos galima perduoti klasės konstruktoriui Serial:

    • Serial(padre)
    • Serial(padre,puerto)
    • Serial(padre,velocidad)
    • Serial(padre,puerto,velocidad)
    • Serial(padre,puerto,velocidad,paridad,bits_datos,bits_parada)
    Nutraukti nuoseklųjį ryšį. Stabdymo metodas.

    Norėdami atlaisvinti nuoseklųjį prievadą, priskirtą generuojant Serial, ir kad kitos sistemos programos gali jį naudoti, ryšiai nutraukiami naudojant metodą stop, kuri negauna parametrų.

    Siųskite duomenis per nuoseklųjį prievadą. Rašymo.metodas

    Norėdami siųsti duomenis, klasė Serial de Apdorojimas apima metodą write su kuria galite perduoti ① teksto eilutes (String), ② baitų arba ③ baitų vektoriai (byte[]). Įdomu tai prisiminti byte en Apdorojimas (Tuo Java) reiškia sveiką skaičių nuo -128 iki 127 ir pagal numatytuosius nustatymus eilutės naudoja kodavimą UTF-16.

    Skaityti duomenis iš nuosekliojo prievado

    Kad programa galėtų atlikti kitas užduotis, kol duomenys gaunami per nuoseklųjį prievadą, įprasta saugoti a buferis gautus duomenis ir prireikus juos perskaitykite. Nors paprastai tai nėra labai efektyvu, galite sustabdyti programą, kad įkeltumėte visus turimus duomenis; Tačiau dažniausiai bus perskaityta informacija, kai ji gaunama, arba kiekvienoje iteracijoje draw, kai yra tam tikras kiekis arba gautas specialus kodas.

    Buferyje turimų duomenų kiekis. Galimas metodas

    Norėdami sužinoti, ar gauti duomenys buferis serija, metodas available grąžina jau išsaugotų baitų skaičių buferis. Bet kuriuo atveju skaitymo operacijos gali grąžinti specialią reikšmę (pvz., -1 o null), kai bandote įkelti duomenis iš buferis serija, kai tuščia.

    Įkelkite po vieną baitą. Skaitymo metodas

    Pagrindiniai klasės metodai Serial kurie naudojami nuosekliojo prievado gautai informacijai skaityti, yra „tipo read» kurie skiriasi daugiausia pagal duomenų, kuriais jie pateikia gautą informaciją, tipą.

    read naudojamas baitų, gautų iš nuosekliojo prievado, pateikti kaip reikšmę nuo 0 iki 255. Kaip duomenų tipas byte de Apdorojimas reiškia intervalą nuo -128 iki 127, o ne nuo 0 iki 255, būtina naudoti int kad pavaizduotų grąžintą diapazoną read. Jei bandysite skaityti su read ir buferis eilutė tuščia, grąžina vertę -1

    Skaityti simbolius iš nuosekliojo prievado. ReadChar metodas

    Metodas readChar yra panašus į read bet grąžina reikšmę formatu char vietoj a int. Kaip ir viduje, char en Apdorojimas (Tuo Java) yra saugomi su dviem baitais, o vertė pasirenkama grąžinti skaitant readChar pagal buferis tuščia serija 0xFFFF o -1.

    Įkelkite teksto eilutę. Metodai readString ir readStringUntil.

    Metodas readString grąžina objektą String sudarytas iš visų turimų duomenų buferis serijos konsultacijos metu.

    Metodas readString sukuria teksto eilutę, darant prielaidą, kad baitai, gauti iš nuosekliojo prievado, yra tokio formato ASCII todėl šis skaitymo metodas negali būti naudojamas kitoms koduotėms.

    Jei kalbama apie skaitymą buferis serija su readString kai tuščia, grąžinama vertė yra null.

    Metodas readStringUntil Pridėti prie readString galimybė grąžinti įkeltą informaciją buferis seriją, padalijančią ją specialiu simboliu (kodu), kuris perduodamas kaip parametras. Toks gautos informacijos skaitymo būdas leidžia atskirti ir separatorius, ir terminatorius, kurie padeda interpretuoti gautą informaciją.

    Metodas readStringUntil sugrąžink null kai į buferis serija neranda jai perduotame argumente nurodyto kodo (vienas baitas).

    Šiame kode skirta Arduino per nuoseklųjį prievadą siunčia tris pranešimus. Pirmieji du baigiasi skirtuke, todėl jie bus rodomi konsolėje. Apdorojimas, o trečiasis, nors ir bus siunčiamas per nuoseklųjį prievadą, nebus skaitomas readStringUntil(9) nes jis nesibaigia skirtuku (su kodu ASCII 9).

    Apdorojama Serial.readStringIki nuskaitoma serijos eilutė

    Skaityti duomenų blokus. ReadBytes ir readBytesUntil metodai.

    Aukščiau aprašyti metodai naudojami duomenims nuskaityti tam tikrais formatais, neapdorotų duomenų blokams arba formatu, kuris nenumatytas Apdorojimas naudojami metodai readBytes y readBytesUntil

    Metodas readBytes pabandykite perskaityti pateiktus duomenis buferis serija. Jei metodui neperduotas joks parametras readBytes visi turimi duomenys nuskaitomi ir grąžinami vektoriumi (byte[]). Jei kaip parametras perduodamas sveikasis skaičius, nuskaitomas maksimalus šiuo skaičiumi nurodytas baitų skaičius ir jie taip pat grąžinami kaip vektorius.

    Yra ir trečias naudojimo būdas readBytes, efektyvesnis, o tai kaip argumentą ima baitų vektorių, į kurį įtraukiamas turinys buferis serija. Šis naudojimo būdas readBytes grąžina sveikąjį skaičių (int), kuris parodo nuskaitytų baitų skaičių.

    Metodas readBytesUntil veikia panašiai, bet apima pirmąjį parametrą, nurodantį baito vertę, kuri, jei randama buferis, parodys skaitymo pabaigą. Taikant šį metodą, parametras, nustatantis maksimalų nuskaitomų baitų skaičių, neturi prasmės, nes kiekis bus nustatomas pagal specialų kodą.

    Norėdami patikrinti metodo veikimą readBytes Tarkime, kad šis kodas Arduino kuri siunčia tekstą per nuoseklųjį prievadą.

    Toliau pateikiamas programos pavyzdys Apdorojimas nuskaito tekstą iš nuosekliojo prievado 32 baitų blokais (TOTAL_BYTES). Kad patikrintų, ar jis veikia, jis rodomas per konsolę kaip simbolius, priversdamas gautų baitų tipą char.

    Toliau pateiktoje ekrano kopijoje galite pamatyti, kaip jie rodomi konsolėje Apdorojimas duomenys, kurie buvo įkelti (ne daugiau kaip) 32 baitų blokais (TOTAL_BYTES) kiekvieną kartą. Tačiau yra problema, apie kurią jau buvo kalbėta: Arduino siuntė eiles Federico Garcia Lorca pavyzdžio, užkoduoto kaip tekstas formatu UTF-8, kuris nėra naudojamas Apdorojimas (Java), kas jums labiau patinka UTF-16 taigi tie, kurie neatitinka rango ASCII spausdinami yra interpretuojami neteisingai.

    Apdorojama Serial.readBytes UTF-16

    Norėdami išspręsti šią problemą, galima įkelti simbolių rinkinius (charsetas) ir apibrėžti naują objektą String verčiant jį pavaizduoti su koduote UTF-8 kaip parodyta toliau pateiktame kodo pavyzdyje.

    Apdorojama Serial.readBytes UTF-8

    Skaityti naujausius gautus duomenis. Paskutinis ir paskutinisChar metodai.

    Nors kiti skaitymo metodai („tipas read») jie įkelia informaciją buferis serija ta pačia tvarka, kokia buvo gauta (FIFO), naudojant šiuos du metodus, paskutinis baitas, pasiekęs buferis serija. Metodas last grąžina paskutinio baito reikšmę kaip a int y lastChar grąžina reikšmę kaip a char.

    Serijinio buferio valdymas

    Nors iki šiol matyti metodai puikiai veikia, jie ne visada yra geriausias būdas išnaudoti prieigą prie nuosekliojo prievado. Norėdami įkelti duomenis, jie turi periodiškai tikrinti būseną buferis seriją ir perskaitykite turimus duomenis pasikartojančioje kodo dalyje. Paprastai efektyvesnis būdas yra skaityti duomenis tik tada, kai žinote, kad jie yra prieinami.

    Skaityti nuoseklųjį prievadą, kai gaunami duomenys. Serialinis renginys.

    Norėdami pasiekti buferis serijinis, kai gaunami duomenys, serijos įvykį galima išnaudoti valdant jį per metodo apibrėžimą serialEvent. Šis metodas kaip argumentą naudoja nuoseklųjį prievadą, kuris jį paleidžia.

    Nustatykite serijinio buferio dydį. Buferio metodas.

    Jei žinote baitų, sudarančių naudingų duomenų bloką, skaičių, galite toliau optimizuoti šį duomenų skaitymo stilių. buferis serija per serialEvent. Metodas buffer leidžia nustatyti baitų, kurie bus saugomi, skaičių buferis prieš pradedant serijinį renginį. Metodas kaip parametrą tikisi sveikojo skaičiaus, nurodančio baitų skaičių.

    Užpildykite buferį, kol gausite vertę. BufferUntil metodas.

    Užuot nustatę metodo iškvietimą serialEvent už tam tikrą duomenų kiekį buferis, su metodu bufferUntil galite sukonfigūruoti saugoti duomenis, kol gausite specialią reikšmę, ir tada padidinti serijos įvykį. Šiam metodui perduotas parametras yra a int kuri atspindi skambučio sukurtą vertę serialEvent.

    Ištrinkite buferyje saugomus duomenis. Aiškus metodas.

    su metodu clear Galite ištrinti šiuo metu esančius duomenis buferis. Šis metodas gali būti naudojamas, pavyzdžiui, norint pradėti naują duomenų priėmimo seansą, ignoruojant duomenis, likusius iš ankstesnio.

    Įprasta apdorojimo programa, skirta duomenims skaityti per nuoseklųjį prievadą

    Galiausiai patogu apibendrinti objekto operacijas Serial de Apdorojimas dažniausiai naudojami, pateikiant tipinį duomenų gavimo per nuoseklųjį prievadą pavyzdį, kad su jais būtų nubrėžtas grafikas, šiuo atveju sukrautų sričių atveju.

    Importuokite serijos biblioteką

    Nustatyti duomenų protokolą (atskyriklius)

    Nustatykite serijos klasės objektą

    Sukurkite serijos klasės objektą, nustatydami naudojamą nuoseklųjį prievadą

    Sukonfigūruokite nuosekliojo prievado buferį

    Įdiekite serijinio įvykio tvarkyklę

    Skaityti serijinį buferį

    Kondicionuokite gautus duomenis

    Nutraukti nuoseklųjį ryšį

    Žemiau pateiktas pavyzdinis kodas iliustruoja šią santrauką su funkcine (nors ir labai paprasta) programa, kuri generuoja srities grafiką su reikšmėmis, gaunamomis per nuoseklųjį prievadą, panašiai kaip rodoma toliau pateiktoje animacijoje.

    grafika su Apdorojama su duomenimis, gautais per nuoseklųjį prievadą

    Kad nepasiklystumėte likusioje programos dalyje ir sutelktumėte dėmesį į serijinį ryšį su Apdorojimas, paryškintos kodo eilutės, atitinkančios ankstesnes operacijas.

    Rašyti komentarą

    Galbūt praleidote