Komunikasi Serial dengan Pemrosesan

Komunikasi Serial dengan Pemrosesan

Komunikasi Serial dengan Pemrosesan

Kelas Serial

Operasi untuk menggunakan komunikasi serial di Pengolahan didefinisikan di kelas Serial.Operasi pertama yang dilakukan untuk menggunakannya dalam suatu program (sketsa) akan memasukkannya ke dalam kode dengan import processing.serial.*;.

Daftar Isi

    Kelas Serial Ini memiliki lima konstruktor berbeda tergantung pada parameter yang ditunjukkan. Satu-satunya parameter yang diperlukan adalah objek induk (induk) yang biasanya berhubungan dengan program utama (misalnya, jendela program) kelas PApplet. Biasanya induknya adalah program yang sedang ditulis (the sketsa saat ini), nilai parameter wajib pertama ini adalah this.

    Lima parameter lain yang dapat diteruskan ke konstruktor adalah ① kecepatan, ② nama port serial ③ keseimbangan digunakan dalam protokol, ④ bit data dan ⑤ bit stop. Parameter yang paling sering dilewati, selain objek induk yang diperlukan, adalah nama port dan kecepatan.

    La kecepatan komunikasi serial adalah bilangan bulat (int) Bahwa defaultnya adalah nilai 9600 jika parameter ini tidak diteruskan ke konstruktor.

    Port serial tersedia. Metode daftar

    El nama pelabuhan mempunyai bentuk yang ditentukan oleh sistem, misalnya dalam Distribusi Linux itu akan menjadi sesuatu seperti /dev/ttyS4 / dev / ttyACM3 o /dev/ttyUSB1 (tergantung jenis portnya), sedangkan di Windows akan seperti ini COM12. Kecuali jika port secara fisik dikaitkan dengan perangkat, program biasanya tidak mengetahui port mana yang akan digunakan. Cara umum untuk memilih port adalah dengan mendapatkan daftar port yang tersedia, menunjukkannya kepada pengguna dan mengizinkan mereka memilih port yang ingin mereka gunakan. Metode Serial.list() mengembalikan vektor string teks (String) dengan nama port yang tersedia di sistem.

    Port yang digunakan secara default oleh perpustakaan Serial adalah yang pertama dikembalikan oleh metode ini list (pasti COM1 pada Windows atau /dev/ttyS0 en GNU / Linux). Kecuali dalam konteks yang sangat terbatas di mana perangkat keras yang digunakan benar-benar diketahui (seperti sistem dalam mode kios), biasanya tidak dihilangkan dan port tujuan ditunjukkan secara jelas.

    Memproses port daftar serial Linux serial ttyACM ttyS ttyUSB

    Tangkapan layar di atas menunjukkan keluaran suatu sistem GNU / Linux yang memiliki empat port serial RS-232 (ttyS0 a ttyS3) dan lima adaptor dari dua jenis (ttyACM0 a ttyACM1 y ttyUSB0 a ttyUSB2).

    Izin perangkat serial Linux ttyACM ttyS ttyUSB

    Untuk mengakses port serial, biasanya pengguna harus menjadi anggota grup yang ditugaskan oleh sistem tty o panggilan keluar. Pada tangkapan layar gambar di atas Anda dapat melihat port serial yang terdaftar ls /dev/tty[ASU]* -la milik kelompok panggilan keluar yang memiliki izin akses baca dan tulis pada mereka.

    Parameter protokol serial

    La keseimbangan komunikasi serial dinyatakan dalam Pengolahan sebagai karakter (char) yang dapat mengambil nilai: ① N (tak satupun) untuk tidak mendeteksi keseimbangan, ② E (bahkan) untuk menunjukkan bahwa sedikit paritas genap, ③ O (aneh) untuk menunjukkan bahwa sedikit paritas ganjil, ④ M (tanda) untuk selalu membuat sedikit paritas dan ⑤ S (ruang) untuk selalu menjadikannya sedikit paritas. Nilai defaultnya, jika tidak diteruskan ke konstruktor sebagai parameter, adalah N (tanpa keseimbangan).

    Jumlah bit data, yang secara default berjumlah delapan, menunjukkan jumlah bit yang membentuk muatan data bersih (disebut karakter atau terkadang kata) yang dikirimkan di setiap unit dasar frame. Parameter yang menunjukkan jumlah bit data dinyatakan sebagai bilangan bulat (int).

    Terakhir, parameter kelima yang mungkin menunjukkan durasi tanda akhir, dinyatakan sebagai hentikan bit (berhenti sedikit), yang ditunjukkan sebagai angka yang diwakili dalam titik mengambang (float) yang dapat mengambil nilai 1.0 (nilai default jika parameter tidak diteruskan ke konstruktor), 1.5, atau 2.0.

    Konstruktor kelas Serial

    Daftar berikut menunjukkan berbagai kombinasi parameter yang dapat diteruskan ke konstruktor kelas Serial:

    • Serial(padre)
    • Serial(padre,puerto)
    • Serial(padre,velocidad)
    • Serial(padre,puerto,velocidad)
    • Serial(padre,puerto,velocidad,paridad,bits_datos,bits_parada)
    Akhiri komunikasi serial. Metode berhenti.

    Untuk melepaskan port serial, yang ditetapkan saat membuat instance Serial, dan agar aplikasi sistem lain dapat menggunakannya, komunikasi diakhiri dengan metode tersebut stop, yang tidak menerima parameter.

    Kirim data melalui port serial. Metode penulisan

    Untuk mengirim data, kelas Serial de Pengolahan menggabungkan metode tersebut write dengan mana ① string teks dapat ditransmisikan (String), ② byte atau ③ byte vektor (byte[]). Sangat menarik untuk mengingat hal itu byte en Pengolahan (Pada Jawa) mewakili bilangan bulat antara -128 dan 127 dan, secara default, string menggunakan pengkodean UTF-16.

    Membaca data dari port serial

    Agar program dapat melakukan tugas lain saat data diterima melalui port serial, biasanya disimpan di a penyangga data yang tiba dan membacanya bila diperlukan. Meskipun biasanya tidak terlalu efisien, Anda dapat menghentikan aplikasi untuk memuat semua data yang tersedia; Namun, hal yang paling umum adalah membaca informasi yang diterima, baik di setiap iterasi draw, ketika jumlah tertentu tersedia atau kode khusus telah diterima.

    Jumlah data yang tersedia di buffer. Metode yang tersedia

    Untuk mengetahui apakah data sudah sampai penyangga seri, metodenya available mengembalikan jumlah byte yang telah disimpan di dalamnya penyangga. Dalam kedua kasus tersebut, operasi baca dapat mengembalikan nilai khusus (misalnya -1 o null) saat mencoba memuat data dari penyangga seri saat kosong.

    Muat satu byte pada satu waktu. Metode membaca

    Metode utama kelas Serial yang berfungsi untuk membaca informasi yang diterima oleh port serial adalah yang bertipe " read» Yang berbeda di antara mereka, terutama berdasarkan jenis data yang digunakan untuk menyampaikan informasi yang diterima.

    read digunakan untuk mengirimkan byte yang diterima oleh port serial sebagai nilai antara 0 dan 255. Sebagai tipe data byte de Pengolahan mewakili rentang antara -128 dan 127 dan bukan antara 0 dan 255, maka perlu menggunakan a int untuk mewakili rentang yang dikembalikan oleh read. Jika Anda mencoba membaca dengan read dan penyangga string kosong, mengembalikan nilai -1

    Membaca karakter dari port serial. Metode readChar

    Metode readChar serupa a read tapi itu mengembalikan nilai dalam format char bukannya a int. Secara internal, itu char en Pengolahan (Pada Jawa) disimpan dengan dua byte, nilai yang dipilih untuk dikembalikan saat membaca readChar sebuah penyangga seri kosong adalah 0xFFFF o -1.

    Memuat string teks. Metode readString dan readStringUntil.

    Metode readString mengembalikan sebuah objek String terbentuk dari seluruh data yang tersedia di penyangga seri pada saat berkonsultasi dengannya.

    Metode readString membuat string teks dengan asumsi bahwa byte yang diterima oleh port serial berada dalam format ASCII jadi metode membaca ini tidak dapat digunakan untuk pengkodean lainnya.

    Jika ini tentang membaca penyangga seri dengan readString ketika kosong, nilai yang dikembalikan adalah null.

    Metode readStringUntil Tambahkan readString kemampuan untuk mengembalikan informasi yang dimuat ke dalam penyangga seri membaginya dengan karakter khusus (kode) yang diteruskan sebagai parameter. Cara membaca informasi yang diterima ini memungkinkan kita membedakan pemisah dan terminator yang membantu menafsirkan informasi yang diterima.

    Metode readStringUntil bawa kembali null ketika di penyangga seri tidak menemukan kode yang ditentukan dalam argumen yang diteruskan ke sana (satu byte).

    Dalam kode berikut untuk Arduino mengirimkan tiga pesan melalui port serial. Dua yang pertama diakhiri dengan tab, sehingga akan muncul di konsol. Pengolahan, sedangkan yang ketiga, meskipun dikirim melalui port serial, tidak akan dibaca readStringUntil(9) karena tidak diakhiri dengan tab (dengan kode ASCII 9).

    Memproses Serial.readStringSampai membaca string serial

    Baca blok data. Metode readBytes dan readBytesUntil.

    Cara-cara yang terlihat di atas digunakan untuk membaca data dengan format tertentu, untuk membaca blok data mentah atau dengan format yang tidak disediakan dalam Pengolahan metode digunakan readBytes y readBytesUntil

    Metode readBytes coba baca data yang tersedia di penyangga seri. Jika tidak ada parameter yang diteruskan ke metode readBytes semua data yang tersedia dibaca dan dikembalikan dalam vektor (byte[]). Jika bilangan bulat dilewatkan sebagai parameter, jumlah maksimum byte yang ditunjukkan oleh nomor ini akan dibaca dan juga dikembalikan sebagai vektor.

    Ada cara ketiga untuk digunakan readBytes, lebih efisien, yang menggunakan vektor byte sebagai argumen yang berisi konten penyangga seri. Cara penggunaan ini readBytes mengembalikan bilangan bulat (int) yang mewakili jumlah byte yang telah dibaca.

    Metode readBytesUntil bekerja dengan cara yang serupa tetapi menyertakan parameter pertama yang mewakili nilai byte itu, jika ditemukan di penyangga, akan menunjukkan akhir pembacaan. Dalam metode ini, parameter yang menentukan jumlah maksimum byte yang akan dibaca tidak masuk akal karena jumlahnya akan ditentukan oleh kode khusus.

    Untuk menguji pengoperasian metode ini readBytes Mari kita asumsikan kode berikut untuk Arduino yang mengirimkan teks melalui port serial.

    Berikut contoh program untuk Pengolahan membaca teks dari port serial dalam blok 32-byte (TOTAL_BYTES). Untuk memverifikasi bahwa ini berfungsi, ini menunjukkannya melalui konsol sebagai karakter, memaksa jenis byte yang diterima char.

    Pada tangkapan layar berikut, Anda dapat melihat tampilannya di konsol Pengolahan data yang telah dimuat dalam blok (maksimum) 32 byte (TOTAL_BYTES) setiap saat. Namun ada masalah yang telah dibicarakan: Arduino telah mengirimkan ayat-ayat Federico García Lorca dari contoh yang dikodekan sebagai teks dalam format UTF-8, yang bukan yang digunakan Pengolahan (Jawa), apa yang Anda sukai UTF-16 jadi mereka yang tidak sesuai dengan pangkat tersebut ASCII dapat dicetak diinterpretasikan secara salah.

    Memproses Serial.readBytes UTF-16

    Untuk mengatasi masalah ini, rangkaian karakter dapat dimuat (rangkaian karakter) dan tentukan objek baru String memaksanya untuk direpresentasikan dengan pengkodean UTF-8 seperti yang ditunjukkan pada contoh kode berikut.

    Memproses Serial.readBytes UTF-8

    Baca data terbaru yang diterima. Metode last dan lastChar.

    Sedangkan metode membaca lainnya (“type read») mereka memuat informasi penyangga seri dalam urutan yang sama dengan saat tiba (FIFO), dengan dua metode ini byte terakhir yang telah mencapai penyangga seri. Metode last mengembalikan nilai byte terakhir sebagai a int y lastChar mengembalikan nilai sebagai a char.

    Manajemen buffer serial

    Meskipun metode yang terlihat sejauh ini berfungsi sempurna, metode tersebut tidak selalu mewakili cara terbaik untuk mengeksploitasi akses ke port serial. Untuk memuat data, mereka perlu memeriksa statusnya secara berkala penyangga seri dan membaca data yang tersedia di bagian kode yang berulang. Cara yang umumnya lebih efisien adalah dengan membaca data hanya jika Anda mengetahui data tersebut tersedia.

    Baca port serial saat data diterima. Acara berseri.

    Untuk mengakses penyangga serial ketika data diterima, acara Serial dapat dieksploitasi dengan mengelolanya melalui definisi metode serialEvent. Metode ini menggunakan port serial yang meluncurkannya sebagai argumen.

    Ukuran buffer serial. Metode penyangga.

    Jika Anda mengetahui jumlah byte yang membentuk blok data yang berguna, Anda dapat lebih mengoptimalkan gaya membaca data ini. penyangga seri melalui serialEvent. Metode buffer memungkinkan Anda mengatur jumlah byte yang akan disimpan di penyangga sebelum meluncurkan acara Serial. Metode ini mengharapkan bilangan bulat sebagai parameter yang mewakili jumlah byte.

    Isi buffer sampai nilai diterima. Metode bufferUntil.

    Daripada mengatur pemanggilan metode serialEvent untuk sejumlah data di penyangga, dengan metode bufferUntil Anda dapat mengonfigurasi untuk menyimpan data hingga nilai khusus tiba dan kemudian menaikkan acara Serial. Parameter yang diteruskan ke metode ini adalah a int yang mewakili nilai yang dihasilkan oleh panggilan ke serialEvent.

    Hapus data yang disimpan di buffer. Metode yang jelas.

    dengan metode clear Anda dapat menghapus data yang ada saat ini di penyangga. Metode ini dapat digunakan, misalnya, untuk memulai sesi penerimaan data baru dengan mengabaikan sisa data dari sesi sebelumnya.

    Aplikasi Pemrosesan yang khas untuk membaca data melalui port serial

    Akhirnya, akan lebih mudah untuk merekapitulasi operasi objek tersebut Serial de Pengolahan yang lebih umum digunakan, melalui contoh umum penerimaan data melalui port serial untuk menggambar grafik dengannya, dalam hal ini area bertumpuk.

    Impor perpustakaan Serial

    Menentukan protokol data (pemisah)

    Tentukan objek kelas Serial

    Buat instance objek kelas Serial dengan mengatur port serial yang digunakan

    Konfigurasikan buffer port serial

    Menerapkan pengendali untuk acara Serial

    Baca buffer serial

    Kondisikan data yang diterima

    Akhiri komunikasi serial

    Contoh kode di bawah mengilustrasikan ringkasan ini dengan aplikasi fungsional (walaupun sangat sederhana) yang menghasilkan grafik area dengan nilai yang diterima melalui port serial, mirip dengan yang ditampilkan animasi berikut.

    grafis dengan Pengolahan dengan data yang diterima melalui port serial

    Agar tidak tersesat dalam sisa program dan memusatkan perhatian pada komunikasi serial dengan Pengolahan, baris kode yang sesuai dengan operasi sebelumnya akan disorot.

    Anda mungkin melewatkannya