Serial
- Войдите на сайт для отправки комментариев
Пнд, 23/05/2022 - 12:59
Ребята добрый день.
Подскажите неучу как правильно читать данные одной ардуины с другой. подключено к 0 и 1 входам с обоих сторон и скорость 115200
ожидаемые значения число от 0 до 999
на первой ардуине я делаю
Serial.println(x);
на второй ардуине я делаю:
while(Serial2.available() ) {
byte c = Serial2.read();
if ((c!=10) and (c!=13)) {SerialBuff+=char(c); delay(2);}
if (c==13) {
if (isNumeric(SerialBuff)) {
//если является числом
micrometer=SerialBuff.toFloat();
}
}
ВОПРОС: как принимать правильно что бы не потерять данные или не получить не корректный результат
ВОПРОС: как принимать правильно что бы не потерять данные или не получить не корректный результат
ОТВЕТ: никак. Протоколы бывают надежными (например, TCP) и ненадёжными (например UDP). UART - ненадёжный протокол.
Дополнение: никак в том смысле, что если нужен надёжный протокол, то его надо делать поверх UART, а не просто писать и читать.
подключено к 0 и 1 входам с обоих сторон
на второй ардуине я делаю:
Если подключать к пинам 0 и 1 и читать при этом Serial2 - ничего не получится
ВОПРОС: как принимать правильно что бы не потерять данные или не получить не корректный результат
Только придумывать свой пакетный протокол с квитированием и формированием контрольной суммы пакета. Причем, простое сложение по модулю тут не катит
спасибо ребята за грамотный ответ.
пожалуй я ограничусь числом в 1 байт и соответственно ограничусь числом от 0 до 255 (для меня допустимо в принципе) .
наверное уйдут возможные ошибки *склейки* цифр
пожалуй я ограничусь числом в 1 байт
слабак :)
https://alexgyver.ru/lessons/crc/
b707, таки заставил
https://alexgyver.ru/lessons/crc/
b707, таки заставил
так кто заставил - ты или гайвер? :)
Если гайвер - то незачет, этот автор на нашем форуме не котируется
Вы - взяли на слабо :)
попробую реализовать механизм контрольной суммы как писали выше ребята.
все расписано - должно получиться.
еще раз Всем спасибо
одной контрольной суммы мало. Нужно организовать передачу данных пакетами с заголовком и суффиксом. иначе контрольную сумму не от чего считать будет.
Вы - взяли на слабо :)
попробую реализовать механизм контрольной суммы как писали выше ребята.
все расписано - должно получиться.
еще раз Всем спасибо
Кроме контрольной суммы, нужен еще и признак начала пакета, длина пакета.
хотел 2 байта данных, 1 байт контрольный, 1 байт признак окончания пакета.
передать правильные пакеты в приоритете. потерять некоторые пакеты - не страшно на самом деле. попробую в приемнике счетчик поставить забракованных пакетов. дальше по ситуации
1 байт признак окончания пакета.
признак окончания пакета не должен встречаться в самом пакете, в случае когда это всего 1 байт - это накладывает ограничения на передаваемые данные
Length - 1 байт
# - начало пакета
.
. Данные в ASCII формате, без '#'
.
# - конец пакета
СRC - 1-2 байта
СRC считается вся, начиная с байта длины, заканчивая вторым '#', включая его
crc сделал - все нормально. спасибо ребята.