Вопросы о последовательной связи

У меня есть Arduino, которые обмениваются данными с помощью rx/tx. Arduino1 (A1) отправляет данные по последовательному порту на Arduino2 (A2). Мои вопросы:

1 - Если A1 выполняет Serial.print каждые 50 мс, а A2 читает серийный номер каждые 100 мс, какое значение получит A2? Например, A1 отправляет «1», а через 50 мс отправляет «2». Учитывая, что A2 будет читать серийный номер через 100+ мс, он получит «2»?

2 - Если A1 отправляет данные каждые 100+ мс, а A2 считывает каждые 50 мс, какое значение получит A2 между ними? Например, A1 отправляет «1», а A2 читает «1» при чтении в 50 мс, но когда он снова читает через 50 мс (в течение этого времени A1 ничего не отправлял), снова будет считываться «1»?

Спасибо

, 👍0


1 ответ


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

0

1 - Если A1 выполняет Serial.print каждые 50 мс, а A2 читает серийный номер каждые 100 мс, какое значение получит A2? Например, A1 отправляет «1», а через 50 мс отправляет «2». Учитывая, что A2 будет читать серийный номер через 100+ мс, он получит «2»?

У Arduino есть 64-байтный (программный) буфер. Вы будете получать числа последовательно до тех пор, пока этот буфер не переполнится. Тогда трудно предсказать, какими будут результаты.

Вероятно, что-то вроде:

121212121[...]2121212121212111111111111111

2 - Если A1 отправляет данные каждые 100+ мс, а A2 считывает каждые 50 мс, какое значение получит A2 между ними? Например, A1 отправляет «1», а A2 читает «1» при чтении в 50 мс, но когда он снова читает через 50 мс (в течение этого времени A1 ничего не отправлял), снова будет считываться «1»?

Если в буфере ничего нет, функция чтения возвращает -1. Это можно преобразовать (IIRC) в ASCII (в зависимости от вашего программного обеспечения) как ÿ, чтобы вы получили:

1ÿ1ÿ1ÿ1ÿ1ÿ...

Вам следует прочитать мой учебник по чтению серийных номеров на Arduino.

,

большое спасибо, @lucian_v