Я пишу простое приложение, в котором Ardunio отправляет прочитанные данные в программу C#, используя простой serial.write (). Я отправляю данные из Ardunio со специальным синтаксисом, и программа c# считывает и интерпретирует их, и в конечном итоге отображает данные.
Например, программа Ardunio отправляет данные
Serial.write("DATA 1 3 90;");
, что означает: значения X и Y на графике 1 равны 3 и 90 соответственно. И программа c# читает ее, используя
private async void Serialport_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
await serialport.BaseStream.ReadAsync(buffer, 0, 1024);
await Task.Run(() => Graph()); // Graph function graphs the data
}
. В функции graph()
я конвертирую буфер в строку с Encode.ASCII.GetString(buffer);
и интерпретирую данные с помощью синтаксиса и прочее. Но по какой-то причине либо программа c# не читает ее достаточно быстро, либо Arduino не отправляет ее достаточно быстро, а сообщения иногда прерываются. Например, полученный мной пакет:
DATA 2 5 90; ДАННЫЕ 5 90 10; ДАННЫЕ 1 1 <| -------- Я не могу получить последнее значение Y </p>
И следующий модуль данных начинается с
75; ДАННЫЕ 5 4 60; ДАННЫЕ 14 5 6; ДАННЫЕ
/ \
|
+ =================== Это здесь
Кстати, все пакеты по 32 байта.
Так что мне нужно либо получать данные построчно, но я не могу этого сделать, потому что ardunio отправляет их слишком быстро
Serial.write("DATA 1 3 90;");
Serial.write("DATA 2 4 40;");
Приходит к C# как ДАННЫЕ 1 3 90; ДАННЫЕ 2 4 40; в целом блок. Или мне нужно получить все сразу?
(я предпочитаю получать это построчно)
ОБНОВЛЕНИЕ:
Когда задержка (1000); добавляется между отправками. Данные обрабатываются правильно. Без задержек Arduino отправляет данные слишком быстро, а данные сбиваются и прерываются. Как я могу убедиться, что данные не задерживаются, но данные надежны и без перебоев?
ОБНОВЛЕНИЕ 2:
Когда размер буфера также увеличен до 100 *1024* 1024 Что касается метода readCount в методе ReadAsyn c, то сообщение о прочтении становится еще больше с перерывами.
Я могу дать вам любую дополнительную информацию.
PS. Я не дал весь код, потому что это большой блок. Но я могу дать его по частям, если вы скажете мне, где вы хотите.
Любая помощь приветствуется.