Seriell kommunikation med bearbetning

Seriell kommunikation med bearbetning

Seriell kommunikation med bearbetning

Serieklassen

Operationerna för att använda seriell kommunikation i Bearbetning definieras i klassen Serial.Den första operationen att utföra för att använda dem i ett program (skiss) kommer att vara att införliva den i koden med import processing.serial.*;.

Innehållsförteckning

    Klass Serial Den har fem olika konstruktörer beroende på de angivna parametrarna. Den enda nödvändiga parametern är det överordnade objektet (förälder) som vanligtvis motsvarar klassens huvudprogram (säg programfönstret). PApplet. Som normalt kommer föräldern att vara programmet som skrivs (den skiss aktuell), kommer värdet på denna första obligatoriska parameter att vara this.

    De andra fem parametrarna som kan skickas till konstruktören är ① hastigheten, ② namnet på serieporten ③ paritet som används i protokollet, ④ databitarna och ⑤ stoppbitarna. De parametrar som oftast skickas, förutom det obligatoriska överordnade objektet, är portnamnet och hastigheten.

    La seriell kommunikationshastighet är ett heltal (int) som är standardvärdet 9600 om denna parameter inte skickas till konstruktorn.

    Seriella portar tillgängliga. Listmetoden

    El portnamn har den form som systemet bestämmer, på detta sätt, till exempel i Linux-distributioner det blir något liknande /dev/ttyS4 / dev / ttyACM3 o / dev / ttyUSB1 (beroende på porttyp), medan det på Windows kommer att vara något liknande COM12. Om inte en port är fysiskt associerad med en enhet vet programmet normalt inte vilken port som ska användas. Ett vanligt sätt att välja port är att skaffa en lista över de tillgängliga, visa den för användaren och låta dem välja den de vill använda. Metoden Serial.list() returnerar en vektor av textsträngar (String) med namnen på de portar som finns tillgängliga på systemet.

    Porten som används som standard av biblioteket Serial är den första av de som returneras av metoden list (säkert COM1 på Windows eller /dev/ttyS0 en GNU / Linux). Förutom i mycket begränsade sammanhang där hårdvaran som arbetas med är strikt känd (som ett system i kioskläge), utelämnas den vanligtvis inte och destinationsporten anges uttryckligen.

    Bearbetar seriell Linux Seriell port ttyACM ttyS ttyUSB

    Skärmdumpen ovan visar resultatet av ett system GNU / Linux som har fyra seriella portar RS-232 (ttyS0 a ttyS3) och fem adaptrar av två typer (ttyACM0 a ttyACM1 y ttyUSB0 a ttyUSB2).

    Linux seriella enheter behörigheter ttyACM ttyS ttyUSB

    För att komma åt serieportarna måste användaren tillhöra den grupp som systemet tilldelar dem, normalt tty o uppringning. I skärmdumpen av bilden ovan kan du se att serieportarna listade med ls /dev/tty[ASU]* -la tillhör gruppen uppringning som har läs- och skrivbehörighet.

    Seriella protokollparametrar

    La paritet av seriell kommunikation uttrycks i Bearbetning som karaktär (char) som kan ta värdena: ① N (ingen) för att inte upptäcka paritet, ② E (även) för att indikera att paritetsbit är jämnt, ③ O (udda) för att indikera att paritetsbit är udda, ④ M (markera) för att alltid göra paritetsbit och ⑤ S (plats) att alltid göra en till paritetsbit. Standardvärdet, om det inte skickas till konstruktorn som en parameter, är N (utan paritet).

    Antalet databitar, som är åtta som standard, indikerar antalet bitar som utgör nettodatanyttolasten (kallas ett tecken eller ibland ett ord) som sänds i varje basenhet i ramen. Parametern som anger antalet databitar uttrycks som ett heltal (int).

    Slutligen, den femte möjliga parametern anger varaktigheten av slutmärket, uttryckt som stoppbitar (stoppbitar), vilket anges som ett tal representerat i flytpunkt (float) som kan ta värdena 1.0 (standardvärdet om parametern inte skickas till konstruktorn), 1.5en 2.0.

    Konstruktörer av seriell klass

    Följande lista visar de olika kombinationerna av parametrar som kan skickas till klasskonstruktorn Serial:

    • Serial(padre)
    • Serial(padre,puerto)
    • Serial(padre,velocidad)
    • Serial(padre,puerto,velocidad)
    • Serial(padre,puerto,velocidad,paridad,bits_datos,bits_parada)
    Avsluta seriell kommunikation. Stoppmetoden.

    För att frigöra serieporten, tilldelad vid instansiering Serial, och att andra systemapplikationer kan använda det, avslutas kommunikationen med metoden stop, som inte tar emot parametrar.

    Skicka data via serieporten. Skrivmetoden

    För att skicka data, klassen Serial de Bearbetning innehåller metoden write med vilka ① textsträngar kan överföras (String), ② byte eller ③ byte vektorer (byte[]). Det är intressant att komma ihåg det byte en Bearbetning (Vid java) representerar ett heltal mellan -128 och 127 och som standard använder strängar kodningen UTF-16.

    Läs data från serieporten

    För att programmet ska kunna utföra andra uppgifter medan data tas emot via serieporten är det vanligt att lagra i en buffert den data som kommer in och läs den när så är lämpligt. Även om det vanligtvis inte är särskilt effektivt, kan du stoppa programmet för att ladda all tillgänglig data; Det vanligaste är dock att läsa informationen när den kommer, antingen i varje iteration av draw, när en viss mängd är tillgänglig eller en speciell kod har mottagits.

    Mängden data tillgänglig i bufferten. Den tillgängliga metoden

    Att veta om data har kommit fram till buffert serien, metoden available returnerar antalet byte som redan har lagrats i denna buffert. I båda fallen kan läsoperationer returnera ett speciellt värde (som t.ex -1 o null) när du försöker ladda data från buffert serie när den är tom.

    Ladda en byte i taget. Läsmetoden

    Klassens huvudsakliga metoder Serial som används för att läsa informationen som tas emot av en seriell port är de av "typ read» som skiljer sig mellan dem, främst genom vilken typ av data de levererar den mottagna informationen i.

    read används för att leverera de byte som tas emot av serieporten som ett värde mellan 0 och 255. Som datatyp byte de Bearbetning representerar intervallet mellan -128 och 127 och inte mellan 0 och 255, är det nödvändigt att använda en int för att representera intervallet som returneras av read. Om du försöker läsa med read och buffert strängen är tom, returnerar värde -1

    Läs tecken från serieporten. ReadChar-metoden

    Metoden readChar es liknande a read men det returnerar ett värde i format char istället för en int. Som internt, den char en Bearbetning (Vid java) lagras med två byte, det värde som valts att returnera vid läsning med readChar en buffert tom serie är 0xFFFF o -1.

    Ladda en textsträng. Metoderna readString och readStringUntil.

    Metoden readString returnerar ett objekt String bildas av alla tillgängliga uppgifter i buffert serien vid tidpunkten för konsultationen.

    Metoden readString skapar textsträngen förutsatt att de byte som tas emot av serieporten är i formatet ASCII så denna läsmetod kan inte användas för andra kodningar.

    Om det handlar om att läsa buffert serie med readString när det är tomt är returvärdet null.

    Metoden readStringUntil Lägg till readString möjligheten att returnera information som laddats in i buffert serie som delar upp den med ett specialtecken (kod) som skickas som en parameter. Detta sätt att läsa den mottagna informationen gör att vi kan särskilja både separatorer och terminatorer som hjälper till att tolka den mottagna informationen.

    Metoden readStringUntil ta tillbaka null när i buffert series hittar inte koden som anges i argumentet som skickas till den (en byte).

    I följande kod för Arduino skickar tre meddelanden via serieporten. De två första slutar på en flik, så de kommer att visas i konsolen. Bearbetning, medan den tredje, även om den kommer att skickas via serieporten, inte kommer att läsas med readStringUntil(9) eftersom det inte slutar på en flik (med kod ASCII 9).

    Bearbetar Serial.readStringUntil läs seriell sträng

    Läs datablock. Metoderna readBytes och readBytesUntil.

    Metoderna som visas ovan används för att läsa data med specifika format, för att läsa block av rådata eller med ett format som inte tillhandahålls i Bearbetning metoder används readBytes y readBytesUntil

    Metoden readBytes försök att läsa informationen som finns tillgänglig i buffert serier. Om ingen parameter skickas till metoden readBytes all tillgänglig data läses och returneras i en vektor (byte[]). Om ett heltal skickas som en parameter läses maximalt antalet byte som indikeras av detta nummer och de returneras också som en vektor.

    Det finns ett tredje sätt att använda readBytes, effektivare, som tar som argument en byte-vektor i vilken innehållet i buffert serier. Detta sätt att använda readBytes returnerar ett heltal (int) som representerar antalet byte som har lästs.

    Metoden readBytesUntil fungerar på ett liknande sätt men inkluderar en första parameter som representerar värdet på byten som, om den finns i buffert, indikerar slutet av läsningen. I den här metoden är parametern som bestämmer det maximala antalet byte som kommer att läsas inte meningsfull eftersom mängden kommer att bestämmas av specialkoden.

    För att testa metodens funktion readBytes Låt oss anta följande kod för Arduino som skickar ett textmeddelande genom serieporten.

    Följande exempelprogram för Bearbetning läser text från serieporten i 32-byte block (TOTAL_BYTES). För att verifiera att det fungerar, visar det det genom konsolen som tecken, vilket tvingar typen av byte som tas emot att char.

    I följande skärmdump kan du se hur de visas i konsolen Bearbetning data som har laddats i block om (maximalt) 32 byte (TOTAL_BYTES) varje gång. Men det finns ett problem som redan har pratats om: Arduino har skickat verserna av Federico García Lorca av exemplet kodat som text i format UTF-8, som inte är den som används Bearbetning (java), vad föredrar du UTF-16 så de som inte motsvarar rangen av ASCII utskrivbara tolkas felaktigt.

    Bearbetar Serial.readBytes UTF-16

    För att lösa detta problem kan teckenuppsättningarna laddas (teckenuppsättning) och definiera ett nytt objekt String tvingar den att representeras med kodning UTF-8 som visas i följande exempelkod.

    Bearbetar Serial.readBytes UTF-8

    Läs de senaste mottagna uppgifterna. De sista och sistaChar-metoderna.

    Medan resten av läsmetoderna (typ read») de laddar informationen om buffert serie i samma ordning som den har kommit (FIFO), med dessa två metoder den sista byten som har nått buffert serier. Metoden last returnerar värdet för den sista byten som en int y lastChar returnerar värdet som ett char.

    Seriell bufferthantering

    Även om metoderna som vi sett hittills är perfekt funktionella, representerar de inte alltid det bästa sättet att utnyttja åtkomst till serieporten. För att ladda data måste de regelbundet kontrollera statusen för buffert serien och läs tillgänglig information i en upprepad del av koden. Ett generellt sett mer effektivt sätt är att läsa data först när du vet att den är tillgänglig.

    Läs serieporten när data tas emot. Seriehändelsen.

    För att komma åt buffert seriell när data tas emot, kan seriehändelsen utnyttjas genom att hantera den genom metoddefinitionen serialEvent. Den här metoden använder den seriella porten som startar den som ett argument.

    Storlek på den seriella bufferten. Buffertmetoden.

    Om du vet antalet byte som utgör ett block av användbar data kan du optimera denna stil att läsa data ytterligare. buffert serie igenom serialEvent. Metoden buffer låter dig ställa in antalet byte som ska lagras i buffert innan du startar en seriehändelse. Metoden förväntar sig som en parameter ett heltal som representerar antalet byte.

    Fyll bufferten tills ett värde tas emot. Metoden bufferUntil.

    Istället för att ställa in metodanropet serialEvent för en mängd data i buffert, med metoden bufferUntil du kan konfigurera att lagra data tills ett speciellt värde kommer och sedan höja seriehändelsen. Parametern som skickas till denna metod är a int som representerar värdet som genereras av samtalet till serialEvent.

    Radera data som lagrats i bufferten. Den tydliga metoden.

    med metoden clear Du kan radera data som för närvarande finns i buffert. Denna metod kan till exempel användas för att starta en ny datamottagningssession och ignorera data som finns kvar från den föregående.

    Typisk bearbetningsprogram för att läsa data genom serieporten

    Slutligen är det bekvämt att rekapitulera objektets operationer Serial de Bearbetning som är vanligare, går igenom ett typiskt exempel på att ta emot data via den seriella porten för att rita en graf med dem, i det här fallet med staplade områden.

    Importera seriebiblioteket

    Bestäm dataprotokoll (separatorer)

    Bestäm objektet för klassen Serial

    Instantiera klassobjektet Serial genom att ställa in den seriella porten som används

    Konfigurera den seriella portbufferten

    Implementera en hanterare för seriehändelsen

    Läs seriell buffert

    Betinga mottagna data

    Avsluta seriell kommunikation

    Exempelkoden nedan illustrerar denna sammanfattning med en funktionell (även om den är väldigt enkel) applikation som genererar ett områdesdiagram med de värden som tas emot via serieporten, något liknande vad följande animation visar.

    grafik med Bearbetning med data som tas emot via serieporten

    För att inte gå vilse i resten av programmet och fokusera uppmärksamheten på seriell kommunikation med Bearbetning, är kodraderna som motsvarar föregående operationer markerade.

    Post kommentar

    Du kanske har missat