Buffer pada Komunikasi Serial Arduino Nano ATmega328
Buffer pada Komunikasi Serial Arduino Nano ATmega328
Arduino Nano dapat melakukan komunikasi serial baik transmit (mengirim) maupun receive (menerima). Pada library Arduino, sudah disiapkan buffer FIFO (First In First Out) pada data yang dikirimkan maupun data yang diterima. Pada tulisan ini dilakukan pengecekan berapa ukuran buffer tersebut. Pengujian ini dilakukan pada Arduino Nano dengan prosesor ATmega328. Untuk prosesor lain, ada kemungkinan ukuran buffernya berbeda.
Library Arduino untuk komunikasi serial memiliki buffer FIFO untuk outgoing maupun incoming.
Hardware yang diperlukan:
- Komputer Desktop PC / Laptop
- Arduino Nano Atmega328
- Kabel USB
Buffer Pengiriman
Ukuran buffer pengiriman yang tersisa dapat dicek dengan fungsi Serial.availableForWrite() . Pada kondisi awal seharusnya buffer yang tersisa adalah maksimal, karena belum ada karakter yang dikirim.
Contoh program:
void setup() {
Serial.begin(115200);
pinMode(LED_BUILTIN, OUTPUT);
}
// the loop routine runs over and over again forever:
void loop() {
int incomingByte ;
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(1000);
incomingByte = Serial.availableForWrite();
Serial.print("jumlah available: ");
Serial.println(incomingByte, DEC);
}
Output seperti sebagai berikut
14:42:26.343 -> jumlah available: 63
Artinya ukuran bufffer outgoing adalah 63 karakter
Buffer Penerimaan
Ukuran buffer data masuk (receive) dapat dicek dengan fungsi Serial.available
Contoh program
void setup() {
Serial.begin(115200);
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
int incomingByte ;
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(1000);
incomingByte = Serial.availableForWrite();
Serial.print("jumlah available: ");
Serial.println(incomingByte, DEC);
}
Setelah itu kirimkan beberapa karakter dari PC ke Arduino. Angka yang ditampilkan akan naik, namun akan berhenti di suatu batas tertentu. Angka inilah yang menunjukkan ukuran buffer FIFO incoming.
Dari hasil percobaan didapatkan rekaman komunikas serial sebagai berikut
14:37:37.062 -> jumlah available: 0
14:37:39.051 -> jumlah available: 0
14:37:41.043 -> jumlah available: 30
14:37:43.038 -> jumlah available: 43
14:37:45.064 -> jumlah available: 54
14:37:47.057 -> jumlah available: 63
14:37:49.050 -> jumlah available: 63
14:37:51.042 -> jumlah available: 63
14:37:53.067 -> jumlah available: 63
14:37:55.058 -> jumlah available: 63
14:37:57.050 -> jumlah available: 63
Artinya jumlah data yang menunggu untuk dibaca oleh software adalah maksimum 63 karakter.