Apa perbedaan antara semua Pustaka Serial Perangkat Lunak? Yang mana yang kompatibel dengan Arduino Nano?

11

Ada begitu banyak Pustaka Serial Perangkat Lunak, apa perbedaan di antara mereka? Dan yang mana yang bisa saya gunakan dengan Arduino Nano saya? Untuk Arduino Nano saya, saya memerlukan satu Port Serial Perangkat Keras dan satu port Serial Perangkat Lunak dengan kecepatan baud 115200.

Pada pin Arduino Nano manakah saya dapat menggunakan pustaka serial perangkat lunak?

William Roy
sumber
Saya menggunakan neoswserial dengan tombol I2C, tetapi ketika saya menambahkan key=getKey();GSM saya (menggunakan pin 2 & 3 Arduino Uno) tidak menerima SMS. Tolong bantu aku.
Nguyễn Trường Hải

Jawaban:

16

Jawaban ini mencantumkan 4 pilihan dasar:

  • HardwareSerial, selalu yang terbaik. Cukup gunakan Serialvariabel yang ditentukan sebelumnya. Pada beberapa Arduinos, ada port HardwareSerial ekstra, yang disebut Serial1, Serial2, dll Nano hanya memiliki Serial.

  • AltSoftSerial, yang terbaik dari pustaka serial perangkat lunak. Hanya satu instance diizinkan, dan itu harus digunakan pada salah satu pin Input Capture (pin 8 & 9 untuk Nano).

  • Saya NeoSWSerialadalah yang terbaik berikutnya. Ini bekerja pada dua pin, tetapi hanya pada baud rate 9600, 19200 dan 38400.

  • SoftwareSerialadalah pilihan terburuk. Ia bekerja pada dua pin, tetapi sangat tidak efisien. Ini menonaktifkan interupsi sepanjang waktu bahwa karakter sedang dikirim ATAU diterima, dan tidak dapat melakukan keduanya pada waktu yang sama (tidak seperti semua pilihan serial lainnya). Ini dapat mengganggu bagian-bagian lain dari sketsa Anda, komunikasi perangkat lain, atau dengan perpustakaan.

Jika Anda bisa menggunakan baud rate yang lebih lambat, Anda bisa tetap mencetak debug Serial, dan menggunakan salah satu AltSoftSerialatau NeoSWSerialuntuk perangkat Anda.

Tetapi jika Anda harus menggunakan 115200, satu-satunya pilihan yang dapat diandalkan adalah Serial. Meskipun AltSoftSerialdan SoftwareSerialmemungkinkan baud rate itu, mereka mungkin tidak mengirim / menerima data dengan benar.

Dalam hal ini, saya sarankan menggunakan Serialuntuk perangkat 115200. Kecuali Anda menggunakan ISP, Anda harus memutuskan koneksi perangkat untuk mengunggah sketsa baru melalui USB.

Kemudian gunakan AltSoftSerialatau NeoSWSerialuntuk pernyataan debug Anda. Anda akan memerlukan adaptor Serial-to-USB TTL (alias FTDI) pada pin yang dipilih untuk terhubung ke PC. The Serial Monitoratau lainnya program emulator Terminal akan membaca dari port USB COM.

slash-dev
sumber
Apakah AltSoftSerial sama dalam kinerja dan karakteristik, hanya itu NeoICSerial menambahkan fungsionalitas apa? Saya tidak mengerti sepenuhnya. github.com/SlashDevin/NeoICSerial
William Roy
2
@ WilliamRoy, NeoICSerialcukup tambahkan attachInterruptmetode ke AltSoftSerial. Anda mungkin tidak perlu menangani setiap karakter dalam interupsi. Cukup gunakan AltSoftSerialdan panggil available()dan kemudian read()jika char sudah siap. Demikian pula, NeoHWSerialmenambahkan attachInterruptfitur yang sama ke inti HardwareSerial. Namun, NeoSWSerialadalah kelas yang sama sekali berbeda (ini juga memiliki attachInterruptfitur).
slash-dev
-2

Perangkat lunak serial meniru port serial, berbeda dari port asli yang telah mendaftar untuk menyimpan semua bit secara berurutan dan mereka menetapkan flag untuk memanggil loop utama, serial perangkat lunak tidak memiliki hal itu. Serial perangkat lunak harus menerima semua bit, satu per satu, jadi Anda harus membaca port digital, menunggu waktu tertentu dan membaca pin digital lagi. Anda harus membuatnya 10 kali (1 bit awal, 8 bit data, dan 1 bit akhir). Waktunya sangat penting. Untuk menggunakan serial perangkat lunak, Anda perlu lebih mengkhawatirkan kinerja.

Anda dapat menggunakan pin interupsi digital untuk pin RX, sehingga Anda "dipanggil" di batas bawah (bit mulai) dan menerima 8 bit.

rodrigo
sumber
1
Ini bahkan tidak berusaha menjawab pertanyaan awal.
Edgar Bonet
1
Ya, ini tidak berusaha untuk menjawab pertanyaan asli karena komunitas Arduino tidak tahu apa yang Anda lakukan dengan kode Periferal.
rodrigo