HardwareSerial::available()
概要
Serial.available()/HardwareSerial::available()は、シリアル通信の受信バッファ内の有効な文字数を返します。リファレンスはこちら}。
ソースコード
HardwareSerial::available()は、hardware/arduino/avr/cores/arduino/HardwareSerial.cppに定義されています。以下に全ソースコードを示します。
|
|
入力はありません。戻り値はintです。
|
|
バッファ内の有効な文字数を計算して返却します。
|
|
rx_buffer_tail < rx_buffer_head の場合、rx_buffer_head - rx_buffer_tail がバッファ内の有効な文字数です。これにSERIAL_RX_BUFFER_SIZEを足すと、SERIAL_RX_BUFFER_SIZE分文字数が大きくなりますが、SEIRIAL_RX_BUFFER_SIZEで割った余りを求めることで、本来必要なrx_buffer_head-rx_buffer_tailに戻ります。

rx_buffer_tail > rx_buffer_head の場合、rx_buffer_head + SERIAL_BUFFER_SIZE - rx_buffer_tail がバッファ内の有効な文字数です。有効な文字数はSERIAL_RX_BUFFER_SIZEを超えることはないので、SERIAL_RX_BUFFER_SIZEで割った余りは変わりません。

わかりづらい場合は、SERIAL_BUFFER_SIZEを仮に100とかにして考えてみると比較的簡単だと思います。
バージョン
Arduino AVR Boards 1.8.6
最終更新日
March 21, 2023