Как получить более 64 символов сообщения из серийного номера

Я пытаюсь сделать движущуюся панель сообщений с помощью модуля Bluetooth Arduino Uno, HC-05 и платы DMD. Отправка сообщения на DMD через модуль Bluetooth может дать только сообщение не более 62 символов. Мне нужна помощь в том, что делать, чтобы получить до 200 или больше. Спасибо.

, 👍1

Обсуждение

Вам нужно прочитать последовательные данные *до того, как буфер заполнится. Не используйте буфер серийного номера вместо своего собственного., @Majenko

А как насчет чтения последовательного буфера в кольцевой буфер размером больше 64 байт?, @PhillyNJ

Я получил доступ к HardwareSerial через program files> arduino, пока не добрался до него, но мне трудно реализовать изменения, я новичок в этих вещах., @Daniel

Дело в том, что у вас на самом деле нет веской причины для изменения библиотеки HardwareSerial. Вы новичок, поэтому начните с правильного использования библиотеки, постоянно считывая байты из внутреннего буфера в свой собственный большой буфер в коде. Вам не нужно изменять библиотеку для этого, @chrisl


2 ответа


2

Во-первых: такой концепции сообщения на последовательной шине не существует, если вы не реализуете ее самостоятельно. На аппаратном уровне передаются только отдельные байты, и вы даже не знаете, когда именно будет передан каждый байт. Поскольку в первую очередь существуют только отдельные байты, нет никаких ограничений на то, сколько байтов может быть передано.

Да, последовательная библиотека имеет ограниченный буфер в 64 байта, но, как писал Майенко, она не предназначена для буферизации всех байтов для одного из ваших сообщений. Он должен буферизировать байты только до тех пор, пока основной скетч не сможет прочитать их из буфера. При чтении байты будут удалены из буфера, освободив буферное пространство для новых символов.

Размер буфера последовательной библиотеки можно увеличить, изменив номера в файле HardwareSerial.h в следующих строках

#define SERIAL_TX_BUFFER_SIZE 64

#define SERIAL_RX_BUFFER_SIZE 64

Но на самом деле это не решение вашей проблемы. Когда вы сначала заполняете буфер, а затем читаете все сообщение, вы просто произвольно ограничиваете себя недостаточным решением.

Вместо того, чтобы ждать всех байтов сообщений (и, наконец, заполнять буфер), вы должны постоянно проверять, доступны ли новые байты, а затем загружать их в свой собственный буфер. Вы можете использовать байт-разделитель для обозначения конца сообщения, в основном для этого используется "\n" (символ новой строки). Скопируйте байты в свой собственный буфер, пока не прочтете байт-разделитель. Затем используйте сообщение в целом для своего приложения. Не забудьте после этого очистить свой буфер.

Примеры для последовательной библиотеки, особенно пример serialEvent, показывают, как это сделать в коде.

,

Все становится еще хуже. В последовательной строке нет понятия сообщения, но в приложении оно часто есть. Кроме того, последовательная связь, проксируемая по Bluetooth, будет сгруппирована в пакеты и, как правило, будет поступать порциями. Но эти всплески часто не совпадают с границами между сообщениями приложений!, @Chris Stratton


1

Программное обеспечение от передатчика может разбить текст, который вы хотите отправить, на части длиной 62 символа и отправить их один за другим. Получатель сохранит самую последнюю часть в строке и соединит ее с другой строкой, которая будет хранить все сообщение. Если вы не возражаете, чтобы это было немного медленнее, то это решение для вас

,