Как подсчитать количество байтов, появляющихся в Arduino serial?

Мне нужно подсчитать количество байтов, появляющихся в шине serial (UART bus), как подсчитать байты в Arduino с последовательными функциями Arduino? возможно ли это?

Применение - Связь RS485 с несколькими платами без ведомых идентификаторов

ведомые платы будут отправлять данные на главную плату, когда,

1-й 10 байт = ведущие отправляют 10-байтное сообщение всем ведомым

рабы слушают шину всегда, пока не настанет очередь отправлять данные

когда количество байтов равно 10, ведомый 1 отправляет данные 5 байтов ведущему

когда количество байтов равно 15 (10+5), ведомый 2 отправляет данные 5 байт ведущему

когда количество байтов равно 20 (15+5), ведомый 3 отправляет данные 5 байт ведущему

максимальное количество - 25 известных значений

, 👍2

Обсуждение

if (Serial.available() > 0) {входящий [байтовый счет] = Serial.read(); Байтовый счет ++; } где Байтовый счет подсчитывает количество полученных байтов, а входящий [..] хранит полученные байты или что-то в этом роде? Похоже, протокол не очень отказоустойчив., @StarCat

Подсчет прост, самое сложное - знать, когда нужно сбросить счетчик. Предположим, что вы иногда будете выходить из синхронизации., @Chris Stratton

У вас должен быть надежный, восстанавливаемый способ узнать, когда * начинать * подсчет. Предположим, что система иногда будет неправильно синхронизирована по той или иной причине, вам нужно иметь самокорректирующуюся конструкцию, которая может вернуть все узлы на борт и подсчитывать * следующий * цикл вместе., @Chris Stratton


1 ответ


1

Serial.available() возвращает количество байтов, доступных для чтения в буфере.

int nBytes=Serial.available();
if (nBytes > x) {
............
............
............
}
,

Добро пожаловать в Arduino: SE. Просто замечание: ответы, размещенные здесь, должны быть написаны на английском языке., @sempaiscuba