Использование 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
Почему?
@Morteza, 👍0
1 ответ
Лучший ответ:
Это связано с тем, что при первом выполнении был получен только один байт. Последовательный интерфейс не отправляет данные одним большим пакетом по 5 байт только потому, что вы набрали пять байт и начали передачу всех одним нажатием Enter. Байты отправляются один за другим, другими словами, последовательно (отсюда и название). Точное время передачи зависит от многих факторов (особенно, когда задействованы другие технологии, такие как интерфейс USB, когда вы передаете через USB-последовательный преобразователь Arduino).
В этом случае отправляется первый байт, за которым следует короткий перерыв, а затем остальные байты. Arduino достаточно быстро проверяет последовательный интерфейс, чтобы обнаружить это на скорости 9600 бод.
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Использовать все контакты как цифровые входы/выходы
- Float печатается только 2 десятичных знака после запятой
- Arduino как USB HID
- Serial1' was not declared in this scope
- Очень простая операция Arduino Uno Serial.readString()
- AT-команда не отвечает на последовательный монитор