Использование Serial.available для возврата количества байтов

Мой код:

char data;
int numOfBytes;
void setup() {
    Serial.begin(9600);
}
void loop()
{
    if (Serial.available() > 0)
    {
        int numOfBytes = Serial.available();
        Serial.print("numOfBytes: ");
        Serial.println(numOfBytes);

        data=Serial.read();
        Serial.print("data: ");
        Serial.print(data);
        Serial.print("\n-----------\n"); 

        delay(500);
    }
}

Я ожидал, что этот код вернет 5, а затем 4,3,2,1.
Но вернулось: 1,4,3,2,1

Почему?

, 👍0


1 ответ


Лучший ответ:

3

Это связано с тем, что при первом выполнении был получен только один байт. Последовательный интерфейс не отправляет данные одним большим пакетом по 5 байт только потому, что вы набрали пять байт и начали передачу всех одним нажатием Enter. Байты отправляются один за другим, другими словами, последовательно (отсюда и название). Точное время передачи зависит от многих факторов (особенно, когда задействованы другие технологии, такие как интерфейс USB, когда вы передаете через USB-последовательный преобразователь Arduino).

В этом случае отправляется первый байт, за которым следует короткий перерыв, а затем остальные байты. Arduino достаточно быстро проверяет последовательный интерфейс, чтобы обнаружить это на скорости 9600 бод.

,