Cara Menghapus Buffer Serial Arduino

Cara Menghapus Buffer Serial Arduino



Arduino adalah platform elektronik yang menerima instruksi dari pengguna dalam bentuk kode yang dikenal sebagai sketsa dan menghasilkan output yang sesuai. Untuk mengumpulkan instruksi dan memprosesnya satu per satu, Arduino menggunakan buffer serial. Buffer serial Arduino menyimpan data yang masuk sampai perangkat siap untuk memprosesnya. Terkadang kita harus mengosongkan buffer serial Arduino untuk menghindari gangguan pada data yang masuk. Mari kita lihat ini lebih detail.

Penyangga Serial Arduino

Jadi, kita semua tahu Arduino berkomunikasi menggunakan protokol komunikasi serial yang dikenal sebagai USART. Ya, Arduino memiliki beberapa protokol lain seperti SPI, I2C tetapi USART adalah protokol yang paling umum dan sering digunakan. Jika Anda tertarik membaca Arduino ketiga protokol, klik di sini .







Buffer serial Arduino mengumpulkan karakter serial yang masuk dan menahannya sampai mikrokontroler dapat memprosesnya. Komunikasi serial adalah metode mentransfer data dari satu perangkat ke perangkat lain. Arduino menggunakan perangkat keras USART pada papannya merakit setiap 8 bit menjadi satu byte. Kemudian simpan byte ini di buffer serial, maksimal 64 byte dapat disimpan di dalam buffer serial Arduino.



Hapus Buffer Serial Arduino

Buffer serial Arduino memiliki memori yang terbatas untuk menyimpan data jika memori meluap atau sejumlah besar data ada di pin serial, kita harus mengosongkan buffer serial terlebih dahulu untuk menyimpan data yang masuk. Mari kita cari tahu cara yang mungkin untuk membersihkan buffer serial Arduino.



Cara Menghapus Buffer Serial Arduino

Untuk mengosongkan ruang buffer serial sehingga dapat diperbarui dengan data baru, berikut dua cara yang dapat membantu:





    • Hapus Serial Buffer menggunakan Fungsi Serial.flush()
    • Hapus Serial Buffer menggunakan Fungsi Serial.begin()

1: Hapus Serial Buffer menggunakan Fungsi Serial.flush()

Jadi, metode pertama yang dapat menghapus buffer serial Arduino adalah menggunakan fungsi Serial.flush(). Fungsi ini milik fungsi perpustakaan serial Arduino.

Serial.flush()

Fungsi Arduino Serial.flush() menunggu data terkirim sepenuhnya. Daripada membuang data yang masuk, ini memungkinkannya untuk menunggu sehingga setelah data di dalam buffer ditransmisikan sepenuhnya, buffer Serial dapat menerima data baru.



Catatan : Setelah menggunakan Serial.flush() program mungkin memerlukan lebih banyak waktu untuk mengeksekusi dan mencetak output pada monitor serial. Sampai sekarang kode Arduino menunggu setelah semua data ditransmisikan sehingga dapat menyimpan data baru di dalam memorinya.

Sintaksis

Serial.flush ( )

Parameter

Dibutuhkan hanya satu parameter.

Serial: Objek port serial

Kembali

Fungsi ini tidak mengembalikan apa pun.

Contoh Kode

Berikut adalah kode yang ditulis tanpa menggunakan fungsi Serial.flush():

batalkan pengaturan ( ) {
Serial.begin ( 9600 ) ;
unsigned long millis_FlushStart = milis ( ) ; /* Mulai kode dengan menyimpan jam Arduino saat ini waktu */
Serial.println ( F ( 'Linuxhint.com/Arduino' ) ) ;
Serial.println ( F ( 'Linuxhint.com/RaspberryPi' ) ) ;
Serial.println ( F ( 'Linuxhint.com/Tutorial' ) ) ;
unsigned long millis_FlushStop = milis ( ) ; /* saat ini waktu pada saat ini */
Serial.print ( F ( 'Tanpa Fungsi Flush dibutuhkan' ) ) ;
Serial.print ( millis_FlushStop - millis_FlushStart ) ; /* Cetakan waktu diambil oleh buffer serial untuk mencetak data */
Serial.println ( F ( 'milidetik.' ) ) ;
}
lingkaran kosong ( ) {
}


Dalam kode di atas kami menginisialisasi tiga string yang berbeda dan memulai kode dengan mengambil waktu saat ini dari fungsi millis() dan menyimpannya ke dalam variabel baru. Setelah data dicetak lagi menggunakan fungsi millis(), kita melewatkan waktu sekarang ke variabel baru.

Setelah kedua waktu diterima di dalam dua variabel, perbedaan akan memberi kita waktu yang dibutuhkan oleh Arduino untuk mencetak tiga string yang ditentukan dalam milidetik.


Di terminal keluaran dapat dilihat dibutuhkan 9 ms untuk mencetak string yang ditentukan.


Sekarang dalam kode yang diberikan di bawah ini kita akan menggunakan fungsi Serial.flush() yang akan memungkinkan semua string lewat dan menunggu di sana sampai buffer serial menjadi jelas untuk menerima data berikutnya. Oleh karena itu, akan memakan waktu ekstra dibandingkan dengan mencetak data tanpa menggunakan Serial.flush().

batalkan pengaturan ( ) {
Serial.begin ( 9600 ) ;
unsigned long millis_FlushStart = milis ( ) ; /* Mulai kode dengan menyimpan jam Arduino saat ini waktu */
Serial.println ( F ( 'Linuxhint.com/Arduino' ) ) ;
Serial.println ( F ( 'Linuxhint.com/RaspberryPi' ) ) ;
Serial.println ( F ( 'Linuxhint.com/Tutorial' ) ) ;
Serial.flush ( ) ; /* Menunggu untuk data yang akan dikirim setelah memori flush itu */
unsigned long millis_FlushStop = milis ( ) ; /* saat ini waktu pada saat ini */
Serial.print ( F ( 'Dengan Fungsi Flush dibutuhkan' ) ) ;
Serial.print ( millis_FlushStop - millis_FlushStart ) ; /* Cetakan waktu diambil oleh buffer serial untuk mencetak data */
Serial.println ( F ( 'milidetik.' ) ) ;
}
lingkaran kosong ( ) {
}


Kode ini mirip dengan yang kami jelaskan sebelumnya. Perbedaannya di sini adalah fungsi Serial.flush() yang memungkinkan program untuk menunggu beberapa waktu tambahan sampai memori buffer serial menjadi jelas untuk menerima data berikutnya.


Pada output kita dapat melihat dengan jelas bahwa kali ini dibutuhkan 76ms untuk mencetak tiga string dibandingkan dengan yang sebelumnya yang hanya membutuhkan 9ms.

2: Hapus Serial Buffer menggunakan Fungsi Serial.begin()

Sampai sekarang kami menjelaskan fungsi Serial.flush() untuk menghapus buffer serial tetapi fungsi ini harus menunggu data terkirim sepenuhnya sekarang pertanyaan muncul di pikiran bagaimana jika kita ingin menghapus data yang masuk di dalam buffer serial. Jawaban atas pertanyaannya sederhana: kita dapat melakukannya dengan menggunakan a ketika loop dengan fungsi perpustakaan Serial.

Sintaksis

ketika ( Serial.tersedia ( ) )
Serial.read ( ) ;
Serial.end ( ) ;
Serial.begin ( 9600 ) ;

Kode

nilai string;
batalkan pengaturan ( ) {
}
lingkaran kosong ( ) {
jika ( Serial.tersedia ( ) ) { /* memeriksa untuk data serial */
val = '' ;
ketika ( Serial.tersedia ( ) ) { /* Baca data serial jika tersedia */
arang Serial_Data = Serial.read ( ) ;
nilai =val+Serial_Data; /* simpan data di dalam string baru */
}
Serial.println ( nilai ) ; /* cetak Baca data */
Serial.end ( ) ; /* akhiri komunikasi serial */
Serial.begin ( 9600 ) ; /* jernih penyangga serial */
}
}


Arduino menggunakan fungsi Serial.begin() untuk menginisialisasi komunikasi serial dengan mendefinisikan baud rate, setelah fungsi ini diinisialisasi, data yang sebelumnya disimpan dalam memori Arduino menjadi jelas. Di sini kita akan memeriksa data serial menggunakan fungsi Serial.available() setelah data dibaca akan disimpan di dalam string baru dan terakhir menggunakan Serial.begin(9600) kita akan menghapus buffer serial Arduino.

Catatan: Kita perlu menyiram buffer serial karena memastikan bahwa data telah dikirim ke perangkat dan tidak menunggu atau menunggu untuk dikirim.

Kesimpulan

Untuk mengosongkan buffer serial Arduino sehingga dapat menyimpan data baru di dalam memori buffer Serial.flush() dan Serial begin dapat digunakan. Ini dapat digunakan untuk menghapus buffer serial Arduino, tetapi kita harus menunggu setelah semua data dikirim untuk menghindari hal ini, kita dapat menggunakan loop sementara dengan fungsi Serial.begin() yang juga dapat menghapus data yang masuk dari buffer serial.