İşleme ile Seri İletişim

İşleme ile Seri İletişim

İşleme ile Seri İletişim

Seri sınıfı

Seri iletişimi kullanma işlemleri İşlemde sınıfta tanımlanır Serial.Bunları bir programda kullanmak için yapılacak ilk işlem (kroki) bunu koda dahil etmek olacaktır import processing.serial.*;.

İçindekiler

    Sınıf Serial Belirtilen parametrelere bağlı olarak beş farklı kurucuya sahiptir. Gerekli olan tek parametre ana nesnedir (ebeveyn) genellikle sınıfın ana programına (örneğin program penceresi) karşılık gelir PApplet. Normalde olduğu gibi ebeveyn, yazılan program olacaktır ( kroki akım), bu ilk zorunlu parametrenin değeri şöyle olacaktır: this.

    Yapıcıya aktarılabilecek diğer beş parametre şunlardır: ① hız, ② seri portun adı ③ eşitlik protokolde kullanılır, ④ veri bitleri ve ⑤ durma bitleri. Gerekli ana nesneye ek olarak en sık iletilen parametreler bağlantı noktası adı ve hızıdır.

    La seri iletişim hızı bir tam sayıdır (int) O varsayılan değeri 9600'dür bu parametre yapıcıya aktarılmazsa.

    Seri portlar mevcut. Liste yöntemi

    El bağlantı noktası adı sistem tarafından belirlenen forma sahiptir, bu şekilde, örneğin Linux dağıtımları şöyle bir şey olacak /dev/ttyS4 / dev / ttyACM3 o /dev/ttyUSB1 (bağlantı noktası türüne bağlı olarak), Windows'ta ise şöyle bir şey olacaktır: COM12. Bir bağlantı noktası bir aygıtla fiziksel olarak ilişkilendirilmediği sürece program normalde hangi bağlantı noktasını kullanacağını bilemez. Bağlantı noktasını seçmenin yaygın bir yolu, mevcut olanların bir listesini almak, bunu kullanıcıya göstermek ve kullanmak istediklerini seçmelerine izin vermektir. Yöntem Serial.list() metin dizelerinin bir vektörünü döndürür (String) sistemde mevcut olan bağlantı noktalarının adlarıyla birlikte.

    Kütüphane tarafından varsayılan olarak kullanılan bağlantı noktası Serial yöntemle döndürülenlerden ilki list (kesinlikle COM1 Windows veya /dev/ttyS0 en GNU / Linux). Üzerinde çalışılan donanımın kesin olarak bilindiği çok sınırlı bağlamlar dışında (kiosk modundaki bir sistem gibi), genellikle atlanmaz ve hedef bağlantı noktası açıkça belirtilir.

    Seri Linux Seri listesi bağlantı noktası işleniyor ttyACM ttyS ttyUSB

    Yukarıdaki ekran görüntüsü bir sistemin çıktısını göstermektedir GNU / Linux dört seri bağlantı noktasına sahip olan RS-232 (ttyS0 a ttyS3) ve iki türden beş adaptör (ttyACM0 a ttyACM1 y ttyUSB0 a ttyUSB2).

    Linux seri aygıt izinleri ttyACM ttyS ttyUSB

    Seri bağlantı noktalarına erişmek için kullanıcının normalde sistemin onları atadığı gruba ait olması gerekir. tty o dışarı arama. Yukarıdaki görselin ekran görüntüsünde seri bağlantı noktalarının listelendiğini görebilirsiniz. ls /dev/tty[ASU]* -la gruba ait dışarı arama üzerinde okuma ve yazma erişim izinleri olan.

    Seri protokol parametreleri

    La eşitlik seri iletişim ile ifade edilir İşlemde karakter olarak (char) şu değerleri alabilir: ① N (Yok) algılamamak için eşitlik, ② E (Üstelik) olduğunu belirtmek için eşlik biti eşit, ③ O (garip) olduğunu belirtmek için eşlik biti tuhaf, ④ M (işaret) her zaman yapmak için eşlik biti ve ⑤ S (uzay) her zaman birini yapmak eşlik biti. Yapıcıya parametre olarak aktarılmazsa varsayılan değer: N (olmadan eşitlik).

    sayısı Veri bitleriVarsayılan olarak sekiz olan, çerçevenin her temel biriminde iletilen net veri yükünü (karakter veya bazen sözcük olarak adlandırılır) oluşturan bit sayısını belirtir. Veri bitlerinin sayısını gösteren parametre bir tamsayı (int).

    Son olarak, beşinci olası parametre şu şekilde ifade edilen son işaretin süresini gösterir: bitleri durdur (bitleri durdur), temsil edilen bir sayı olarak gösterilir kayan nokta (float) değerleri alabilen 1.0 (parametre yapıcıya aktarılmazsa varsayılan değer), 1.5ya da 2.0.

    Seri sınıfının yapıcıları

    Aşağıdaki liste, sınıf yapıcısına aktarılabilecek farklı parametre kombinasyonlarını göstermektedir. Serial:

    • Serial(padre)
    • Serial(padre,puerto)
    • Serial(padre,velocidad)
    • Serial(padre,puerto,velocidad)
    • Serial(padre,puerto,velocidad,paridad,bits_datos,bits_parada)
    Seri iletişimi sonlandırın. Durdurma yöntemi.

    Örnekleme sırasında atanan seri bağlantı noktasını serbest bırakmak için Serial, diğer sistem uygulamalarının da kullanabileceği şekilde iletişimler sonlandırılır. stop, parametreleri almayan.

    Seri port üzerinden veri gönderin. Yazma yöntemi

    Veri göndermek için sınıf Serial de İşlemde yöntemi içerir write hangi ① metin dizelerinin iletilebileceği (String), ② bayt veya ③ bayt vektörleri (byte[]). Bunu hatırlamak ilginç byte en İşlemde (At Java) -128 ile 127 arasında bir tamsayıyı temsil eder ve varsayılan olarak dizeler kodlamayı kullanır UTF-16.

    Seri porttan veri oku

    Veriler seri port üzerinden alınırken programın diğer görevleri yerine getirebilmesi için, genellikle bir tampon Gelen verileri toplayın ve uygun olduğunda okuyun. Genellikle çok verimli olmasa da, mevcut tüm verileri yüklemek için uygulamayı durdurabilirsiniz; Ancak en yaygın olanı, bilginin her yinelemesinde, geldikçe okunması olacaktır. draw, belirli bir miktar mevcut olduğunda veya özel bir kod alındığında.

    Tamponda mevcut olan veri miktarı. Mevcut yöntem

    Verilerin ulaşıp ulaşmadığını bilmek tampon dizi, yöntem available bu alanda zaten depolanmış olan bayt sayısını döndürür tampon. Her iki durumda da okuma işlemleri özel bir değer döndürebilir (örneğin, -1 o null) veri yüklemeye çalışırken tampon boş olduğunda seri.

    Her seferinde bir bayt yükleyin. Okuma yöntemi

    Sınıfın ana yöntemleri Serial Bir seri port tarafından alınan bilgilerin okunmasına yarayan cihazlar "tip" tipindedir read» Temel olarak alınan bilgiyi ilettikleri veri türüne göre aralarında farklılık gösterir.

    read seri porttan alınan byte'ları 0 ile 255 arasında bir değer olarak iletmek için kullanılır. Veri türü olarak byte de İşlemde 128 ile 127 arasında değil, -0 ile 255 arasındaki aralığı temsil ediyorsa, bir int tarafından döndürülen aralığı temsil etmek için read. ile okumayı denerseniz read y el tampon dize boş, değeri döndürür -1

    Seri bağlantı noktasından karakterleri okuyun. ReadChar yöntemi

    Yöntem readChar benzer read ancak biçiminde bir değer döndürür char yerine int. Dahili olarak, char en İşlemde (At Java) iki bayt ile saklanır; okuma sırasında döndürülecek değer seçilir. readChar Bir tampon boş seri 0xFFFF o -1.

    Bir metin dizesi yükleyin. readString ve readStringUntil yöntemleri.

    Yöntem readString bir nesne döndürür String mevcut tüm verilerden oluşturulmuştur. tampon danışmanlık sırasında seri.

    Yöntem readString seri port tarafından alınan baytların şu formatta olduğunu varsayarak metin dizesini oluşturur ASCII dolayısıyla bu okuma yöntemi diğer kodlamalar için kullanılamaz.

    Eğer konu okumakla ilgiliyse tampon ile seri readString boş olduğunda dönüş değeri null.

    Yöntem readStringUntil a ekle readString yüklenen bilgileri geri döndürme yeteneği tampon parametre olarak iletilen özel bir karaktere (kod) göre bölünen seri. Alınan bilgilerin bu şekilde okunması, alınan bilgilerin yorumlanmasına yardımcı olan hem ayırıcıları hem de sonlandırıcıları ayırt etmemizi sağlar.

    Yöntem readStringUntil geri getir null ne zaman tampon serisi kendisine iletilen bağımsız değişkende belirtilen kodu (bir bayt) bulamıyor.

    Aşağıdaki kodda Arduino seri port üzerinden üç mesaj gönderir. İlk ikisi bir sekmede bittiği için konsolda görünecekler. İşlemdeüçüncüsü ise seri port üzerinden gönderilmesine rağmen okunmayacaktır. readStringUntil(9) bir sekmede bitmediği için (kodla ASCII 9).

    Seri dizesi okunana kadar Serial.readStringUn işleniyor

    Veri bloklarını okuyun. ReadBytes ve readBytesUntil yöntemleri.

    Yukarıda görülen yöntemler, belirli formatlardaki verileri okumak, ham veri bloklarını okumak veya burada belirtilmeyen bir formattaki verileri okumak için kullanılır. İşlemde yöntemler kullanılır readBytes y readBytesUntil

    Yöntem readBytes mevcut verileri okumaya çalışın tampon seri. Yönteme hiçbir parametre aktarılmazsa readBytes mevcut tüm veriler okunur ve bir vektöre döndürülür (byte[]). Parametre olarak bir tam sayı iletilirse, bu sayının gösterdiği maksimum bayt sayısı okunur ve bunlar da vektör olarak döndürülür.

    Kullanmanın üçüncü bir yolu var readBytes, daha verimli, bu da bir bayt vektörünü argüman olarak alır, içeriğin içine alındığı tampon seri. Bu şekilde kullanma readBytes bir tamsayı döndürür (int) okunan bayt sayısını temsil eder.

    Yöntem readBytesUntil benzer şekilde çalışır ancak baytın değerini temsil eden bir ilk parametre içerir. tampon, okumanın sonunu gösterecektir. Bu yöntemde okunacak maksimum bayt sayısını belirleyen parametre, miktar özel kod tarafından belirleneceği için bir anlam ifade etmemektedir.

    Yöntemin işleyişini test etmek için readBytes için aşağıdaki kodu varsayalım. Arduino seri port üzerinden bir metin gönderir.

    Aşağıdaki örnek program İşlemde seri porttan metni 32 baytlık bloklar halinde okur (TOTAL_BYTES). Çalıştığını doğrulamak için, onu konsol aracılığıyla karakter olarak gösterir ve alınan baytların türünü zorlar. char.

    Aşağıdaki ekran görüntüsünde konsolda nasıl görüntülendiklerini görebilirsiniz. İşlemde (maksimum) 32 baytlık bloklar halinde yüklenen veriler (TOTAL_BYTES) her zaman. Ancak daha önce konuşulan bir sorun var: Arduino ayetlerini gönderiyordu Federico García Lorca biçiminde metin olarak kodlanmış örneğin UTF-8, kullanılan bu değil İşlemde (Java), ne tercih edersin UTF-16 yani rütbeye uymayanlar ASCII yazdırılabilir öğeler yanlış yorumlanır.

    Serial.readBytes UTF-16 işleniyor

    Bu sorunu çözmek için karakter setleri yüklenebilir (karakter kümesi) ve yeni bir nesne tanımlayın String kodlamayla temsil edilmeye zorlamak UTF-8 aşağıdaki örnek kodda gösterildiği gibi.

    Serial.readBytes UTF-8 işleniyor

    Alınan en son verileri okuyun. Last ve lastChar yöntemleri.

    Okuma yöntemlerinin geri kalanı ("tür read») bilgilerini yüklerler tampon seri geldiği sırayla (FIFO), bu iki yöntemle ulaşılan son bayt tampon seri. Yöntem last son baytın değerini bir olarak döndürür int y lastChar değeri olarak döndürür char.

    Seri arabellek yönetimi

    Şu ana kadar görülen yöntemler mükemmel şekilde işlevsel olsa da, seri bağlantı noktasına erişimden yararlanmanın her zaman en iyi yolunu temsil etmezler. Verileri yüklemek için periyodik olarak veri durumunu kontrol etmeleri gerekir. tampon seriyi açın ve kodun yinelenen bir bölümünde bulunan verileri okuyun. Genellikle daha verimli bir yol, verileri yalnızca mevcut olduğunu bildiğiniz zaman okumaktır.

    Veri alındığında seri bağlantı noktasını okuyun. Seri olay.

    Erişmek için tampon Veri alındığında seri, yöntem tanımı aracılığıyla yönetilerek Seri olayından yararlanılabilir. serialEvent. Bu yöntem, kendisini argüman olarak başlatan seri bağlantı noktasını kullanır.

    Seri arabelleği boyutlandırın. Tampon yöntemi.

    Yararlı bir veri bloğunu oluşturan bayt sayısını biliyorsanız, bu veri okuma tarzını daha da optimize edebilirsiniz. tampon seri yoluyla serialEvent. Yöntem buffer depolanacak bayt sayısını ayarlamanıza olanak tanır. tampon Bir Seri etkinlik başlatmadan önce. Yöntem, parametre olarak bayt sayısını temsil eden bir tam sayı bekler.

    Bir değer alınana kadar arabelleği doldurun. BufferUntil yöntemi.

    Yöntem çağrısını ayarlamak yerine serialEvent bir miktar veri için tampon, yöntemle bufferUntil özel bir değer gelene kadar verileri depolayacak ve ardından Seri olayını yükseltecek şekilde yapılandırabilirsiniz. Bu yönteme iletilen parametre bir int çağrısının ürettiği değeri temsil eden serialEvent.

    Arabellekte saklanan verileri silin. Açık yöntem.

    yöntem ile clear Şu anda mevcut olan verileri silebilirsiniz. tampon. Bu yöntem, örneğin öncekinden kalan verileri göz ardı ederek yeni bir veri alım oturumu başlatmak için kullanılabilir.

    Seri port üzerinden veri okumak için Tipik İşleme uygulaması

    Son olarak, nesnenin işlemlerini özetlemek uygundur Serial de İşlemde daha yaygın olarak kullanılanlar, seri port üzerinden veri alımının tipik bir örneğini inceleyerek bunlarla bir grafik çizerler (bu durumda yığılmış alanlar).

    Seri kitaplığı içe aktar

    Veri protokolünü (ayırıcıları) belirleyin

    Serial sınıfının nesnesini belirleyin

    Kullanılan seri bağlantı noktasını ayarlayarak Seri sınıfı nesnesini örnekleyin

    Seri bağlantı noktası arabelleğini yapılandırma

    Seri olay için bir işleyici uygulama

    Seri arabelleği oku

    Alınan verileri koşullandırın

    Seri iletişimi sonlandır

    Aşağıdaki örnek kod, seri port üzerinden alınan değerlerle bir alan grafiği oluşturan, aşağıdaki animasyonun gösterdiğine benzer, işlevsel (çok basit olmasına rağmen) bir uygulamayla bu özeti göstermektedir.

    Seri port üzerinden alınan verilerle işleniyor grafiği

    Programın geri kalanında kaybolmamak ve dikkatleri seri iletişime odaklamak için İşlemde, önceki işlemlere karşılık gelen kod satırları vurgulanır.

    Yorum Ekle

    Kaçırmış Olabilirsiniz