Apa perbedaan antara Serial.write dan Serial.print? Dan kapan mereka digunakan?
26
Apa perbedaan antara Serial.write dan Serial.print? Dan kapan mereka digunakan?
Keduanya telah digunakan untuk mencetak pada monitor serial, apa perbedaan mereka yang sebenarnya?
Menulis data biner ke port serial. Data ini dikirim sebagai byte atau serangkaian byte; untuk mengirim karakter yang mewakili digit angka, gunakan fungsi print ().
Serial.print ()
Mencetak data ke port serial sebagai teks ASCII yang dapat dibaca manusia.
Serial.write lebih membumi, sederhana dan cepat, dibuat untuk berbicara biner, satu byte setiap kali. contoh:
Serial.write(0x45); // will write 0100 0101 to the cable
Serial.print di sisi lain lebih fleksibel, ia akan melakukan konversi untuk Anda dari ASCII ke biner juga dapat dikonversi ke BIN / HEX / OCT / DEC tetapi Anda perlu menentukan argumen kedua seperti
Serial.writemengirim byte ke port serial sambil Serial.printmengirim karakter ASCII sehingga orang dapat membaca dengan mudah.
Beberapa perangkat bekerja menggunakan byte untuk mengatur konfigurasi, umumnya menggunakan paket data dan Anda perlu menggunakan fungsi tulis untuk berkomunikasi dengannya. Akhirnya mereka akan mengirim byte melalui antarmuka serial dan kemudian Anda dapat menginterpretasikan dengan pergi setiap byte.
Semua contoh di atas benar, tetapi mungkin lebih jelas .... Semua data yang dikirim melalui port serial dikirim sebagai 1 dan 0. (Jelas .... Saya harap) ... Perbedaan dalam dua perintah adalah bagaimana apa pun yang dikirim sebenarnya diterjemahkan / ditafsirkan ke / dari 1 dan 0 ini. Contoh paling jelas melibatkan pengiriman nomor.
Katakanlah Anda perlu mengirim nomor 217. Representasi biner (1 dan 0) dari nomor ini adalah 11011001. Menggunakan perintah Serial.write(217)secara harfiah hanya akan mengirim 11011001 melintasi garis. Representasi Hex dari nomor yang sama adalah 0xD9, dan perintah Serial.write(0xD9)akan mengirim hal yang sama ... 11011001.
Di sinilah mulai menarik ... Jika Anda menggunakan perintah, Serial.write("217")Anda akan mendapatkan ini: 00110010 00110001 00110111 ... APA?!?!?
Ketika sebuah string dilewatkan sebagai argumen, ia dipecah menjadi karakter individu, dikonversi ke ASCII, dan kemudian dikirim sebagai byte untuk setiap karakter. Anda akan mendapatkan hasil yang sama persis jika Anda menggunakan yang berikut:
Sekarang mari kita lihat Serial.print(). Perintah Serial.print(217)atau Serial.print("217")keduanya akan mencetak hal yang sama: 00110010 00110001 00110111. Ini karena perintah cetak pertama-tama mengubah angka apa pun menjadi representasi string dan kemudian menggunakan perintah Serial.write()untuk mengirim setiap karakter sebagai bit ASCII individual.
Meskipun ini bukan deskripsi LENGKAP, saya harap ini membantu membuat Anda berpikir ke arah yang benar ...
Namun cara lain untuk menjawab ini adalah dengan menyatakan Serial.write menerima karakter tunggal di mana Serial.print menerima string. Mungkin ada beberapa perbedaan tetapi ini yang utama.
Jawaban:
Dari situs Arduino untuk Serial.write dan Serial.print :
Serial.write ()
Serial.print ()
sumber
Serial.write lebih membumi, sederhana dan cepat, dibuat untuk berbicara biner, satu byte setiap kali. contoh:
Serial.print di sisi lain lebih fleksibel, ia akan melakukan konversi untuk Anda dari ASCII ke biner juga dapat dikonversi ke BIN / HEX / OCT / DEC tetapi Anda perlu menentukan argumen kedua seperti
lebih banyak contoh dengan output serial visual:
Kode:
OUTPUT SERI:
Kode:
OUTPUT SERI:
Serial.println () di sisi lain akan menambahkan akhir baris 2 byte 0x0D dan 0x0A seperti yang Anda lihat dalam bingkai
Kode:
OUTPUT SERI:
sumber
Serial.write
mengirim byte ke port serial sambilSerial.print
mengirim karakter ASCII sehingga orang dapat membaca dengan mudah.Beberapa perangkat bekerja menggunakan byte untuk mengatur konfigurasi, umumnya menggunakan paket data dan Anda perlu menggunakan fungsi tulis untuk berkomunikasi dengannya. Akhirnya mereka akan mengirim byte melalui antarmuka serial dan kemudian Anda dapat menginterpretasikan dengan pergi setiap byte.
sumber
Semua contoh di atas benar, tetapi mungkin lebih jelas .... Semua data yang dikirim melalui port serial dikirim sebagai 1 dan 0. (Jelas .... Saya harap) ... Perbedaan dalam dua perintah adalah bagaimana apa pun yang dikirim sebenarnya diterjemahkan / ditafsirkan ke / dari 1 dan 0 ini. Contoh paling jelas melibatkan pengiriman nomor.
Katakanlah Anda perlu mengirim nomor 217. Representasi biner (1 dan 0) dari nomor ini adalah 11011001. Menggunakan perintah
Serial.write(217)
secara harfiah hanya akan mengirim 11011001 melintasi garis. Representasi Hex dari nomor yang sama adalah 0xD9, dan perintahSerial.write(0xD9)
akan mengirim hal yang sama ... 11011001.Di sinilah mulai menarik ... Jika Anda menggunakan perintah,
Serial.write("217")
Anda akan mendapatkan ini: 00110010 00110001 00110111 ... APA?!?!?Ketika sebuah string dilewatkan sebagai argumen, ia dipecah menjadi karakter individu, dikonversi ke ASCII, dan kemudian dikirim sebagai byte untuk setiap karakter. Anda akan mendapatkan hasil yang sama persis jika Anda menggunakan yang berikut:
(00110010 00110001 00110111)
Sekarang mari kita lihat
Serial.print()
. PerintahSerial.print(217)
atauSerial.print("217")
keduanya akan mencetak hal yang sama: 00110010 00110001 00110111. Ini karena perintah cetak pertama-tama mengubah angka apa pun menjadi representasi string dan kemudian menggunakan perintahSerial.write()
untuk mengirim setiap karakter sebagai bit ASCII individual.Meskipun ini bukan deskripsi LENGKAP, saya harap ini membantu membuat Anda berpikir ke arah yang benar ...
sumber
Namun cara lain untuk menjawab ini adalah dengan menyatakan Serial.write menerima karakter tunggal di mana Serial.print menerima string. Mungkin ada beberapa perbedaan tetapi ini yang utama.
sumber