Mga Serial na Komunikasyon na may Pagproseso

Mga Serial na Komunikasyon na may Pagproseso

Mga Serial na Komunikasyon na may Pagproseso

Ang Serial class

Ang mga operasyon upang magamit ang mga serial na komunikasyon sa Pagproseso ay tinukoy sa klase Serial.Ang unang operasyon na gagawin upang magamit ang mga ito sa isang programa (gumuhit ng plano) ay upang isama ito sa code na may import processing.serial.*;.

Talaan ng Nilalaman

    Klase Serial Mayroon itong limang magkakaibang mga konstruktor depende sa mga parameter na ipinahiwatig. Ang tanging kinakailangang parameter ay ang parent object (magulang) na karaniwang tumutugma sa pangunahing programa (sabihin, ang window ng programa) ng klase PApplet. Gaya ng karaniwan, ang magulang ang magiging programang isinusulat (ang gumuhit ng plano kasalukuyang), ang halaga ng unang mandatoryong parameter na ito ay this.

    Ang iba pang limang parameter na maaaring ipasa sa constructor ay ① ang bilis, ② ang pangalan ng serial port ③ ang pagkakapantay-pantay ginamit sa protocol, ④ ang mga bit ng data at ⑤ ang mga stop bit. Ang pinakamadalas na ipinapasa na mga parameter, bilang karagdagan sa kinakailangang bagay ng magulang, ay ang pangalan ng port at bilis.

    La bilis ng serial communications ay isang integer (int) Iyon default sa value na 9600 kung ang parameter na ito ay hindi naipasa sa constructor.

    Available ang mga serial port. Ang paraan ng listahan

    El pangalan ng port ay ang form na tinutukoy ng system, sa ganitong paraan, halimbawa sa Mga pamamahagi ng Linux ito ay magiging isang katulad /dev/ttyS4 / dev / ttyACM3 o /dev/ttyUSB1 (depende sa uri ng port), habang sa Windows ito ay magiging katulad nito COM12. Maliban kung pisikal na nauugnay ang isang port sa isang device, karaniwang hindi malalaman ng program kung aling port ang gagamitin. Ang isang karaniwang paraan upang piliin ang port ay upang makakuha ng isang listahan ng mga magagamit, ipakita ito sa user at payagan silang pumili ng isa na gusto nilang gamitin. Ang paraan Serial.list() nagbabalik ng vector ng mga string ng teksto (String) na may mga pangalan ng mga port na magagamit sa system.

    Ang port na ginagamit ng library bilang default Serial ay ang una sa mga ibinalik ng pamamaraan list (sigurado COM1 sa Windows o /dev/ttyS0 en GNU / Linux). Maliban sa napakalimitadong mga konteksto kung saan ang hardware na pinagtatrabahuhan ay mahigpit na kilala (tulad ng isang sistema sa kiosk mode), hindi ito karaniwang inaalis at ang destinasyong port ay hayagang ipinapahiwatig.

    Pinoproseso ang serial Linux Serial list port ttyACM ttyS ttyUSB

    Ipinapakita ng screenshot sa itaas ang output ng isang system GNU / Linux na mayroong apat na serial port RS-232 (ttyS0 a ttyS3) at limang adapter ng dalawang uri (ttyACM0 a ttyACM1 y ttyUSB0 a ttyUSB2).

    Mga pahintulot ng serial device ng Linux ttyACM ttyS ttyUSB

    Upang ma-access ang mga serial port, ang user ay dapat na kabilang sa pangkat kung saan sila itinalaga ng system, sa karaniwan tty o dialogout. Sa screenshot ng larawan sa itaas makikita mo na nakalista ang mga serial port na may ls /dev/tty[ASU]* -la kabilang sa grupo dialogout na may mga pahintulot sa pag-access sa pagbasa at pagsulat sa kanila.

    Mga parameter ng serial protocol

    La pagkakapantay-pantay ng mga serial na komunikasyon ay ipinahayag sa Pagproseso bilang isang karakter (char) na maaaring kunin ang mga halaga: ① N (wala) upang hindi matukoy ang pagkakapantay-pantay, ② E (kahit na) upang ipahiwatig na ang parity bit ay pantay, ③ O (kakaiba) upang ipahiwatig na ang parity bit ay kakaiba, ④ M (markahan) para laging gawin ang parity bit at ⑤ S (puwang) para laging gawin ang isa parity bit. Ang default na halaga, kung hindi naipasa sa constructor bilang isang parameter, ay N (nang wala pagkakapantay-pantay).

    Ang bilang ng mga data bits, na walo bilang default, ay nagpapahiwatig ng bilang ng mga bit na bumubuo sa net data payload (tinatawag na character o kung minsan ay isang salita) na ipinapadala sa bawat pangunahing yunit ng frame. Ang parameter na nagpapahiwatig ng bilang ng mga bit ng data ay ipinahayag bilang isang integer (int).

    Sa wakas, ang ikalimang posibleng parameter ay nagpapahiwatig ng tagal ng huling marka, na ipinahayag bilang stop bits (stop bits), na ipinahiwatig bilang isang numero na kinakatawan sa lumulutang na punto (float) na maaaring kunin ang mga halaga 1.0 (ang default na halaga kung ang parameter ay hindi naipasa sa tagabuo), 1.5o 2.0.

    Mga konstruktor ng Serial na klase

    Ipinapakita ng sumusunod na listahan ang iba't ibang kumbinasyon ng mga parameter na maaaring ipasa sa tagabuo ng klase Serial:

    • Serial(padre)
    • Serial(padre,puerto)
    • Serial(padre,velocidad)
    • Serial(padre,puerto,velocidad)
    • Serial(padre,puerto,velocidad,paridad,bits_datos,bits_parada)
    Tapusin ang mga serial communication. Ang paraan ng paghinto.

    Upang i-release ang serial port, na itinalaga kapag nag-instantiate Serial, at na magagamit ito ng ibang mga application ng system, ang mga komunikasyon ay winakasan gamit ang pamamaraan stop, na hindi tumatanggap ng mga parameter.

    Magpadala ng data sa pamamagitan ng serial port. Ang pagsulat.paraan

    Upang magpadala ng data, ang klase Serial de Pagproseso isinasama ang pamamaraan write kung saan ① text string ay maaaring ipadala (String), ② byte o ③ byte vectors (byte[]). Nakakatuwang alalahanin iyon byte en Pagproseso (Sa Java) ay kumakatawan sa isang integer sa pagitan ng -128 at 127 at, bilang default, ginagamit ng mga string ang encoding Utf-16.

    Basahin ang data mula sa serial port

    Upang ang programa ay makapagsagawa ng iba pang mga gawain habang ang data ay natanggap sa pamamagitan ng serial port, karaniwan nang mag-imbak sa isang nagpapahina ng lakas ang data na dumating at basahin ito kung naaangkop. Bagama't kadalasan ay hindi masyadong mahusay, maaari mong ihinto ang application upang i-load ang lahat ng magagamit na data; Gayunpaman, ang pinakakaraniwang bagay ay ang basahin ang impormasyon sa pagdating nito, alinman sa bawat pag-ulit ng draw, kapag ang isang tiyak na dami ay magagamit o isang espesyal na code ay natanggap.

    Dami ng data na available sa buffer. Ang magagamit na pamamaraan

    Upang malaman kung ang data ay dumating sa nagpapahina ng lakas serye, ang pamamaraan available ibinabalik ang bilang ng mga byte na naimbak na dito nagpapahina ng lakas. Sa alinmang kaso, ang mga read operation ay maaaring magbalik ng isang espesyal na halaga (tulad ng -1 o null) kapag sinusubukang i-load ang data mula sa nagpapahina ng lakas serye kapag walang laman.

    Mag-load ng isang byte sa isang pagkakataon. Ang paraan ng pagbasa

    Ang mga pangunahing pamamaraan ng klase Serial na nagsisilbing basahin ang impormasyong natanggap ng isang serial port ay ang mga "uri read» na naiiba sa pagitan nila, pangunahin, ayon sa uri ng data kung saan inihahatid nila ang impormasyong natanggap.

    read ay ginagamit upang ihatid ang mga byte na natanggap ng serial port bilang isang halaga sa pagitan ng 0 at 255. Bilang uri ng data byte de Pagproseso kumakatawan sa hanay sa pagitan ng -128 at 127 at hindi sa pagitan ng 0 at 255, kinakailangang gumamit ng int upang kumatawan sa hanay na ibinalik ni read. Kung susubukan mong basahin kasama read at nagpapahina ng lakas walang laman ang string, nagbabalik ng halaga -1

    Basahin ang mga character mula sa serial port. Ang paraan ng readChar

    Ang pamamaraan readChar ay katulad sa read ngunit nagbabalik ito ng halaga sa format char sa halip na a int. Bilang panloob, ang char en Pagproseso (Sa Java) ay naka-imbak na may dalawang byte, ang halaga na piniling ibalik kapag nagbabasa kasama readChar isang nagpapahina ng lakas walang laman ang serye 0xFFFF o -1.

    Mag-load ng text string. Ang mga pamamaraan ng readString at readStringUntil.

    Ang pamamaraan readString nagbabalik ng isang bagay String nabuo mula sa lahat ng datos na makukuha sa nagpapahina ng lakas serye sa oras ng pagkonsulta dito.

    Ang pamamaraan readString lumilikha ng text string sa pag-aakalang ang mga byte na natanggap ng serial port ay nasa format ASCII kaya hindi magagamit ang paraan ng pagbabasa na ito para sa iba pang pag-encode.

    Kung ito ay tungkol sa pagbabasa ng nagpapahina ng lakas serye na may readString kapag walang laman, ang return value ay null.

    Ang pamamaraan readStringUntil Idagdag sa readString ang kakayahang ibalik ang impormasyong na-load sa nagpapahina ng lakas serye na hinahati ito ng isang espesyal na karakter (code) na ipinasa bilang isang parameter. Ang paraan ng pagbabasa ng impormasyong natanggap ay nagbibigay-daan sa amin na makilala ang parehong mga separator at terminator na tumutulong sa pagbibigay kahulugan sa impormasyong natanggap.

    Ang pamamaraan readStringUntil ibalik mo null kapag nasa nagpapahina ng lakas serye ay hindi mahanap ang code na tinukoy sa argument na ipinasa dito (isang byte).

    Sa sumusunod na code para sa Arduino nagpapadala ng tatlong mensahe sa pamamagitan ng serial port. Ang unang dalawa ay nagtatapos sa isang tab, kaya lalabas ang mga ito sa console. Pagproseso, habang ang pangatlo, bagama't ipapadala ito sa pamamagitan ng serial port, ay hindi babasahin readStringUntil(9) dahil hindi ito nagtatapos sa isang tab (na may code ASCII 9).

    Pinoproseso ang Serial.readStringHanggang basahin ang serial string

    Basahin ang mga bloke ng data. Ang mga pamamaraan ng readBytes at readBytesUntil.

    Ang mga pamamaraan na nakikita sa itaas ay ginagamit upang basahin ang data na may mga partikular na format, upang basahin ang mga bloke ng raw data o may isang format na hindi ibinigay para sa Pagproseso ginagamit ang mga pamamaraan readBytes y readBytesUntil

    Ang pamamaraan readBytes subukan mong basahin ang data na makukuha sa nagpapahina ng lakas serye. Kung walang parameter na ipinasa sa pamamaraan readBytes lahat ng magagamit na data ay binabasa at ibinalik sa isang vector (byte[]). Kung ang isang integer ay ipinasa bilang isang parameter, ang maximum ng bilang ng mga byte na ipinahiwatig ng numerong ito ay mababasa at ang mga ito ay ibinalik din bilang isang vector.

    May pangatlong paraan para magamit readBytes, mas mahusay, na kumukuha bilang argumento ng isang byte vector kung saan ang mga nilalaman ng nagpapahina ng lakas serye. Ang ganitong paraan ng paggamit readBytes nagbabalik ng integer (int) na kumakatawan sa bilang ng mga byte na nabasa.

    Ang pamamaraan readBytesUntil gumagana sa katulad na paraan ngunit may kasamang unang parameter na kumakatawan sa halaga ng byte na, kung makikita sa nagpapahina ng lakas, ay magsasaad ng pagtatapos ng pagbabasa. Sa pamamaraang ito, ang parameter na tumutukoy sa maximum na bilang ng mga byte na babasahin ay walang saysay dahil ang halaga ay matutukoy ng espesyal na code.

    Upang subukan ang pagpapatakbo ng pamamaraan readBytes Ipagpalagay natin ang sumusunod na code para sa Arduino na nagpapadala ng text sa pamamagitan ng serial port.

    Ang sumusunod na halimbawa ng programa para sa Pagproseso nagbabasa ng teksto mula sa serial port sa 32-byte na mga bloke (TOTAL_BYTES). Upang i-verify na gumagana ito, ipinapakita ito sa console bilang mga character, na pinipilit ang uri ng mga byte na natanggap char.

    Sa sumusunod na screenshot makikita mo kung paano ipinapakita ang mga ito sa console Pagproseso ang data na na-load sa mga bloke ng (maximum) 32 bytes (TOTAL_BYTES) sa bawat oras. Ngunit mayroong isang problema na napag-usapan na: Arduino ay nagpapadala ng mga talata ng Federico Garcia Lorca ng halimbawang naka-encode bilang teksto sa format UTF-8, na hindi ang ginamit Pagproseso (Java), ano ang mas gusto mo Utf-16 kaya ang mga hindi tumutugma sa ranggo ng ASCII napi-print ay mali ang interpretasyon.

    Pinoproseso ang Serial.readBytes UTF-16

    Upang malutas ang problemang ito, maaaring i-load ang mga set ng character (charset) at tukuyin ang isang bagong bagay String pinipilit itong irepresenta ng encoding UTF-8 tulad ng ipinapakita sa sumusunod na halimbawang code.

    Pinoproseso ang Serial.readBytes UTF-8

    Basahin ang pinakabagong data na natanggap. Ang huli at hulingChar na mga pamamaraan.

    Habang ang natitirang mga pamamaraan sa pagbabasa (ang "uri read») nilo-load nila ang impormasyon ng nagpapahina ng lakas serye sa parehong pagkakasunud-sunod ng pagdating nito (FIFO), gamit ang dalawang pamamaraang ito ang huling byte na umabot sa nagpapahina ng lakas serye. Ang paraan last ibinabalik ang halaga ng huling byte bilang a int y lastChar ibinabalik ang halaga bilang a char.

    Pamamahala ng serial buffer

    Bagama't ang mga pamamaraan na nakikita sa ngayon ay ganap na gumagana, hindi ito palaging kumakatawan sa pinakamahusay na paraan upang pagsamantalahan ang pag-access sa serial port. Upang mai-load ang data, kailangan nilang pana-panahong suriin ang katayuan ng nagpapahina ng lakas serye at basahin ang data na magagamit sa paulit-ulit na bahagi ng code. Ang isang mas mahusay na paraan sa pangkalahatan ay basahin lamang ang data kapag alam mong available ito.

    Basahin ang serial port kapag natanggap ang data. Ang Serial na kaganapan.

    Upang ma-access ang nagpapahina ng lakas serial kapag ang data ay natanggap, ang Serial na kaganapan ay maaaring pinagsamantalahan sa pamamagitan ng pamamahala nito sa pamamagitan ng kahulugan ng pamamaraan serialEvent. Ginagamit ng paraang ito ang serial port na naglulunsad nito bilang argumento.

    Sukatin ang serial buffer. Ang paraan ng buffer.

    Kung alam mo ang bilang ng mga byte na bumubuo sa isang bloke ng kapaki-pakinabang na data, maaari mong higit pang i-optimize ang istilong ito ng pagbabasa ng data. nagpapahina ng lakas serye sa pamamagitan ng serialEvent. Ang paraan buffer ay nagbibigay-daan sa iyong itakda ang bilang ng mga byte na maiimbak sa nagpapahina ng lakas bago maglunsad ng Serial na kaganapan. Inaasahan ng pamamaraan bilang isang parameter ang isang integer na kumakatawan sa bilang ng mga byte.

    Punan ang buffer hanggang sa matanggap ang isang halaga. Ang paraan ng bufferUntil.

    Sa halip na itakda ang tawag sa pamamaraan serialEvent para sa isang dami ng data sa nagpapahina ng lakas, sa pamamaraan bufferUntil maaari mong i-configure upang mag-imbak ng data hanggang sa dumating ang isang espesyal na halaga at pagkatapos ay itaas ang Serial na kaganapan. Ang parameter na ipinasa sa paraang ito ay a int na kumakatawan sa halaga na ginawa ng tawag sa serialEvent.

    Tanggalin ang data na nakaimbak sa buffer. Ang malinaw na pamamaraan.

    gamit ang pamamaraan clear Maaari mong tanggalin ang data na kasalukuyang nasa nagpapahina ng lakas. Maaaring gamitin ang paraang ito, halimbawa, upang magsimula ng bagong sesyon ng pagtanggap ng data na hindi pinapansin ang natitirang data mula sa nauna.

    Karaniwang Application sa Pagproseso para sa pagbabasa ng data sa pamamagitan ng serial port

    Sa wakas, ito ay maginhawa upang i-recapitulate ang mga pagpapatakbo ng bagay Serial de Pagproseso na mas karaniwang ginagamit, na dumaraan sa isang tipikal na halimbawa ng pagtanggap ng data sa pamamagitan ng serial port upang gumuhit ng graph kasama nila, sa kasong ito ng mga nakasalansan na lugar.

    I-import ang Serial library

    Tukuyin ang protocol ng data (mga separator)

    Tukuyin ang object ng Serial class

    I-instantiate ang Serial class object sa pamamagitan ng pagtatakda ng serial port na ginamit

    I-configure ang serial port buffer

    Magpatupad ng handler para sa Serial na kaganapan

    Basahin ang serial buffer

    Kundisyon ang data na natanggap

    Tapusin ang mga serial communication

    Ang halimbawang code sa ibaba ay naglalarawan ng buod na ito gamit ang isang functional (bagaman napakasimple) na application na bumubuo ng isang area graph na may mga halaga na natanggap sa pamamagitan ng serial port, isang bagay na katulad ng ipinapakita ng sumusunod na animation.

    graphic na may Pagproseso gamit ang data na natanggap sa pamamagitan ng serial port

    Upang hindi mawala sa natitirang bahagi ng programa at ituon ang pansin sa mga serial na komunikasyon sa Pagproseso, ang mga linya ng code na tumutugma sa mga nakaraang operasyon ay naka-highlight.

    Maaaring Na-miss Mo