Патамушта хардовый буфер всего один байт, на IBM был 16
у меня есть ESP32C3 с CH343, хардовый там явно не байт, но скетч видимо из своего буфера вычитывает…
Вот так работает:
void setup()
{
Serial.begin(9600);
}
void loop()
{
static String stroka="";
if (Serial.available() > 0)
{
char sim = Serial.read();
if (sim=='\n')
{
// Здесь обрабываю stroka, например, вывожу её в монитор
Serial.println(stroka);
stroka="";
}
else
{
if ((byte)sim!=13) stroka+=sim;
}
}
}
Но мне надо передавать нулевым байтом контрольную сумму, а затем значущую часть строки.
Но байт контрольной суммы может быть и '\r' и '\n'. Как отлавливать байт контрольной суммы - пока не знаю.
Никакого отношения к вопросу это не имеет. v258 дал совершенно верное описание. Вот только “небольшая задержка” - не очень красивое решение.
А для того, чтобы сделать решение красивым, нужна дополнительная информация.
Во-первых, известна ли заранее длина принимаемой строки?
Если “да”, все просто: if(Serial.available() == stringLength) ....
Если “нет”, можно периодически проверять длину строки, и как только период ожидания очередного приращения длины превысил время приема символа, значить, строка закончилась.
буфер циклический? если адрес головы и хвоста совпал то буфер пуст, если функции вычисления разницы (объёма не пустого циклического буфера) требует какой-то задержки то это полная хрень а не функция
PS не умение писать драйверы для серийного порта имеет длительную историю, вспомним хотя бы LINUX vs WINNT, последний прекрасно работ с компортами, а вот в линухе драйверы были полный отстой
Потому что сериал еще передаёт «признак новой строки» как дополнительный символ.
Ну или «перенос на новую строку», да как хотите его назовите - он всегда в ардуино иде по умолчанию включен.
Собственно, так я и предложил - считали байт, подождали, если есть еще что, повторили, нету ничего - вышли из цикла. Проверять буфер на длину строки имеет смысл только если длина строки заранее известна
Вот!
Нужно создать тему “Древняя история вычислительной техники” и все мемуары помещать туда.
Кстати - да.
Еще один часто используемый способ - пометить конец строки каким-нибудь символом, который заведомо нигде не используется, и выводить строку а печать только после получения этого символа (сам символ, естественно, на печать выводить не нужно).