Seriell kommunikasjon med prosessering

Seriell kommunikasjon med prosessering

Seriell kommunikasjon med prosessering

Serieklassen

Operasjonene for å bruke seriell kommunikasjon i i prosess er definert i klassen Serial.Den første operasjonen som skal utføres for å bruke dem i et program (skisse) vil være å inkorporere den i koden med import processing.serial.*;.

Innholdsfortegnelse

    Klasse Serial Den har fem forskjellige konstruktører avhengig av parameterne som er angitt. Den eneste nødvendige parameteren er det overordnede objektet (forelder) som vanligvis tilsvarer hovedprogrammet (for eksempel programvinduet) til klassen PApplet. Som normalt vil forelderen være programmet som skrives (den skisse gjeldende), vil verdien av denne første obligatoriske parameteren være this.

    De andre fem parameterne som kan sendes til konstruktøren er ① hastigheten, ② navnet på serieporten ③ paritet brukt i protokollen, ④ databitene og ⑤ stoppbitene. De mest brukte parameterne, i tillegg til det nødvendige overordnede objektet, er portnavnet og hastigheten.

    La seriell kommunikasjonshastighet er et heltall (int) enn standard til verdien 9600 hvis denne parameteren ikke sendes til konstruktøren.

    Serieporter tilgjengelig. Listemetoden

    El portnavn har formen bestemt av systemet, på denne måten, for eksempel i Linux-distribusjoner det blir noe sånt som /dev/ttyS4 / dev / ttyACM3 o / dev / ttyUSB1 (avhengig av porttype), mens på Windows vil det være noe sånt COM12. Med mindre en port er fysisk knyttet til en enhet, vil programmet normalt ikke vite hvilken port som skal brukes. En vanlig måte å velge porten på er å få en liste over de tilgjengelige, vise den til brukeren og la dem velge den de vil bruke. Metoden Serial.list() returnerer en vektor av tekststrenger (String) med navnene på portene som er tilgjengelige på systemet.

    Porten som brukes som standard av biblioteket Serial er den første av de som returneres av metoden list (sikkert COM1 på Windows eller /dev/ttyS0 en GNU / Linux). Bortsett fra i svært begrensede sammenhenger der maskinvaren det jobbes med er strengt kjent (for eksempel et system i kioskmodus), utelates den vanligvis ikke, og destinasjonsporten er uttrykkelig angitt.

    Behandler seriell Linux Seriell listeport ttyACM ttyS ttyUSB

    Skjermbildet ovenfor viser utdataene til et system GNU / Linux som har fire serielle porter RS-232 (ttyS0 a ttyS3) og fem adaptere av to typer (ttyACM0 a ttyACM1 y ttyUSB0 a ttyUSB2).

    Linux serielle enheter tillatelser ttyACM ttyS ttyUSB

    For å få tilgang til de serielle portene må brukeren tilhøre gruppen som systemet tildeler dem, normalt tty o oppringing. I skjermbildet av bildet ovenfor kan du se at serieportene som er oppført med ls /dev/tty[ASU]* -la tilhører gruppen oppringing som har lese- og skrivetilgangstillatelser.

    Seriell protokollparametere

    La paritet av seriell kommunikasjon kommer til uttrykk i i prosess som en karakter (char) som kan ta verdiene: ① N (none) for ikke å oppdage paritet, ② E (til og med) for å indikere at paritetsbit er jevn, ③ O (Odd) for å indikere at paritetsbit er rart, ④ M (merke) for alltid å lage paritetsbit og ⑤ S (plass) å alltid lage en til paritetsbit. Standardverdien, hvis den ikke sendes til konstruktøren som en parameter, er N (uten paritet).

    Antallet databiter, som er åtte som standard, indikerer antall biter som utgjør nettodatanyttelasten (kalt et tegn eller noen ganger et ord) som overføres i hver grunnleggende enhet i rammen. Parameteren som indikerer antall databiter er uttrykt som et heltall (int).

    Til slutt angir den femte mulige parameteren varigheten av sluttmerket, uttrykt som stoppbiter (stoppbiter), som er angitt som et tall representert i flytende punkt (float) som kan ta verdiene 1.0 (standardverdien hvis parameteren ikke sendes til konstruktøren), 1.5en 2.0.

    Konstruktører av seriell-klassen

    Følgende liste viser de forskjellige kombinasjonene av parametere som kan sendes til klassekonstruktøren Serial:

    • Serial(padre)
    • Serial(padre,puerto)
    • Serial(padre,velocidad)
    • Serial(padre,puerto,velocidad)
    • Serial(padre,puerto,velocidad,paridad,bits_datos,bits_parada)
    Avslutt seriell kommunikasjon. Stoppmetoden.

    For å frigjøre den serielle porten, tildelt ved instansiering Serial, og at andre systemapplikasjoner kan bruke det, avsluttes kommunikasjon med metoden stop, som ikke mottar parametere.

    Send data gjennom den serielle porten. Skrivemetoden

    For å sende data, klassen Serial de i prosess inkorporerer metoden write som du kan overføre ① tekststrenger med (String), ② byte eller ③ byte vektorer (byte[]). Det er interessant å huske det byte en i prosess (At Java) representerer et heltall mellom -128 og 127, og strenger bruker som standard kodingen UTF-16.

    Les data fra seriell port

    For at programmet skal kunne utføre andre oppgaver mens data mottas gjennom serieporten, er det vanlig å lagre i en buffer dataene som kommer og les dem når det passer. Selv om det vanligvis ikke er veldig effektivt, kan du stoppe programmet for å laste inn alle tilgjengelige data; Det vanligste vil imidlertid være å lese informasjonen etter hvert som den kommer, enten i hver iterasjon av draw, når et visst antall er tilgjengelig eller en spesiell kode er mottatt.

    Mengde data tilgjengelig i bufferen. Den tilgjengelige metoden

    For å vite om data har kommet til buffer serien, metoden available returnerer antall byte som allerede er lagret i denne buffer. I begge tilfeller kan leseoperasjoner returnere en spesiell verdi (som f.eks -1 o null) når du prøver å laste inn data fra buffer serie når den er tom.

    Last inn én byte om gangen. Lesemetoden

    Klassens hovedmetoder Serial som tjener til å lese informasjonen mottatt av en seriell port er de av "type read» som skiller seg mellom dem, hovedsakelig av typen data de leverer informasjonen som mottas.

    read brukes til å levere bytene mottatt av serieporten som en verdi mellom 0 og 255. Som datatype byte de i prosess representerer området mellom -128 og 127 og ikke mellom 0 og 255, er det nødvendig å bruke en int for å representere området returnert av read. Hvis du prøver å lese med read og buffer strengen er tom, returnerer verdi -1

    Les tegn fra serieporten. ReadChar-metoden

    Metoden readChar ligner på read men det returnerer en verdi i format char i stedet for en int. Som internt char en i prosess (At Java) lagres med to byte, verdien som er valgt å returnere ved lesing med readChar en buffer tom serie er 0xFFFF o -1.

    Last inn en tekststreng. ReadString og readStringUntil-metodene.

    Metoden readString returnerer et objekt String dannet av alle tilgjengelige data i buffer serien på tidspunktet for konsultasjon.

    Metoden readString oppretter tekststrengen forutsatt at bytene som mottas av den serielle porten er i formatet ASCII så denne lesemetoden kan ikke brukes for andre kodinger.

    Hvis det handler om å lese buffer serie med readString når tom, er returverdien null.

    Metoden readStringUntil legge til readString muligheten til å returnere informasjon lastet inn i buffer serie som deler den med et spesialtegn (kode) som sendes som en parameter. Denne måten å lese den mottatte informasjonen på gjør at vi kan skille både skilletegn og terminatorer som hjelper til med å tolke informasjonen som mottas.

    Metoden readStringUntil Bring tilbake null når i buffer serien finner ikke koden spesifisert i argumentet som ble sendt til den (én byte).

    I følgende kode for Arduino sender tre meldinger gjennom serieporten. De to første ender i en fane, så de vises i konsollen. i prosess, mens den tredje, selv om den vil bli sendt gjennom den serielle porten, ikke vil bli lest med readStringUntil(9) siden det ikke ender i en fane (med kode ASCII 9).

    Behandler Serial.readStringUntil lest seriell streng

    Les datablokker. ReadBytes og readBytesUntil-metodene.

    Metodene vist ovenfor brukes til å lese data med bestemte formater, for å lese blokker med rådata eller med et format som ikke er gitt i i prosess metoder brukes readBytes y readBytesUntil

    Metoden readBytes prøv å lese dataene som er tilgjengelige i buffer serie. Hvis ingen parameter sendes til metoden readBytes alle tilgjengelige data leses og returneres i en vektor (byte[]). Hvis et heltall sendes som en parameter, blir maksimalt antall byte angitt med dette tallet lest og de returneres også som en vektor.

    Det er en tredje måte å bruke readBytes, mer effektiv, som tar som argument en byte-vektor der innholdet i buffer serie. Denne måten å bruke readBytes returnerer et heltall (int) som representerer antall byte som er lest.

    Metoden readBytesUntil fungerer på lignende måte, men inkluderer en første parameter som representerer verdien av byten som, hvis den finnes i buffer, vil indikere slutten av lesingen. I denne metoden gir ikke parameteren som bestemmer det maksimale antallet byte som skal leses mening siden mengden vil bli bestemt av spesialkoden.

    For å teste funksjonen til metoden readBytes La oss anta følgende kode for Arduino som sender en tekst gjennom serieporten.

    Følgende eksempelprogram for i prosess leser tekst fra serieporten i 32-byte blokker (TOTAL_BYTES). For å bekrefte at den fungerer, viser den den gjennom konsollen som tegn, og tvinger typen byte som mottas til å char.

    I det følgende skjermbildet kan du se hvordan de vises i konsollen i prosess dataene som er lastet inn i blokker på (maksimalt) 32 byte (TOTAL_BYTES) hver gang. Men det er et problem som allerede har blitt snakket om: Arduino har sendt versene til Federico García Lorca av eksemplet kodet som tekst i format UTF-8, som ikke er den som brukes i prosess (Java), hva foretrekker du UTF-16 så de som ikke samsvarer med rangeringen av ASCII utskrivbare tolkes feil.

    Behandler Serial.readBytes UTF-16

    For å løse dette problemet kan tegnsettene lastes (tegnsett) og definer et nytt objekt String tvinger den til å bli representert med koding UTF-8 som vist i følgende eksempelkode.

    Behandler Serial.readBytes UTF-8

    Les de siste dataene som er mottatt. De siste og sisteChar-metodene.

    Mens resten av lesemetodene ("type read») de laster inn informasjonen til buffer serie i samme rekkefølge som den har kommet (FIFO), med disse to metodene den siste byten som har nådd buffer serie. Metoden last returnerer verdien av den siste byten som en int y lastChar returnerer verdien som en char.

    Seriell bufferhåndtering

    Selv om metodene som er sett så langt er perfekt funksjonelle, representerer de ikke alltid den beste måten å utnytte tilgangen til den serielle porten på. For å laste inn dataene, må de med jevne mellomrom sjekke statusen til buffer serie og les dataene som er tilgjengelige i en repeterende del av koden. En generelt mer effektiv måte er å lese dataene bare når du vet at de er tilgjengelige.

    Les den serielle porten når data mottas. Seriehendelsen.

    For å få tilgang til buffer seriell når dataene mottas, kan seriehendelsen utnyttes ved å administrere den gjennom metodedefinisjonen serialEvent. Denne metoden bruker serieporten som starter den som et argument.

    Størrelse på seriebufferen. Buffermetoden.

    Hvis du vet antall byte som utgjør en blokk med nyttige data, kan du optimalisere denne stilen for å lese dataene ytterligere. buffer serie gjennom serialEvent. Metoden buffer lar deg angi antall byte som skal lagres i buffer før du starter en seriehendelse. Metoden forventer som en parameter et heltall som representerer antall byte.

    Fyll bufferen til en verdi er mottatt. BufferUntil-metoden.

    I stedet for å sette metodekallet serialEvent for en mengde data i buffer, med metoden bufferUntil du kan konfigurere til å lagre data til en spesiell verdi kommer og deretter øke seriehendelsen. Parameteren som sendes til denne metoden er en int som representerer verdien produsert av oppfordringen til serialEvent.

    Slett dataene som er lagret i bufferen. Den klare metoden.

    Med metoden clear Du kan slette dataene som for øyeblikket er i buffer. Denne metoden kan for eksempel brukes til å starte en ny datamottaksøkt og ignorere gjenværende data fra den forrige.

    Typisk behandlingsprogram for lesing av data gjennom den serielle porten

    Til slutt er det praktisk å rekapitulere operasjonene til objektet Serial de i prosess som er mer vanlig, går gjennom et typisk eksempel på mottak av data gjennom serieporten for å tegne en graf med dem, i dette tilfellet med stablede områder.

    Importer seriebiblioteket

    Bestem dataprotokoll (separatorer)

    Bestem objektet til seriell-klassen

    Instantier Serial-klasseobjektet ved å angi serieporten som brukes

    Konfigurer den serielle portbufferen

    Implementer en behandler for seriehendelsen

    Les seriell buffer

    Betingelse for mottatte data

    Avslutt seriell kommunikasjon

    Eksempelkoden nedenfor illustrerer dette sammendraget med en funksjonell (men veldig enkel) applikasjon som genererer en arealgraf med verdiene som mottas gjennom serieporten, noe som ligner på det følgende animasjon viser.

    grafikk med Behandling med data mottatt gjennom den serielle porten

    For ikke å gå seg vill i resten av programmet og fokusere oppmerksomheten på seriell kommunikasjon med i prosess, er kodelinjene som tilsvarer de tidligere operasjonene uthevet.

    Legg inn kommentar

    Du kan ha gått glipp av