Abstract
The Serial.available()/HardwareSerial::available() returns how many bytes can be written to receive buffer of serial communication.
Source Code
The HardwareSerial::available is defined in hardware/arduino/avr/cores/arduino/HardwareSerial.cpp as below.
|
|
No input, returns int.
|
|
Calculate the number of available bytes in the buffer.
|
|
In case of rx_buffer_tail < rx_buffer_head, rx_buffer_head - rx_buffer_tail is the available bytes in the buffer. Adding SERIAL_RX_BUFFER_SIZE to the result, it will SERIAL_RX_BUFFER_SIZE more than the result. To get the answer, calculate the division reminder by SERIAL_RX_BUFFER_SIZE, then get rx_buffer_head-rx_buffer_tail.
In case of rx_buffer_tail > rx_buffer_head, rx_buffer_head + SERIAL_BUFFER_SIZE - rx_buffer_tail is the available bytes in the buffer. As the valid available bytes dose not exceed SERIAL_RX_BUFFER_SIZE, the result of reminder is not changed.
If it is difficult to understand, assuming SERIAL_BUFFER_SIZE something like 100, may ease the problem.
Version
Arduino AVR Boards 1.8.6
Last Update
August 25, 2019