Чтение серийных данных с Arduino - PullRequest
1 голос
/ 12 декабря 2011

Я пытаюсь прочитать серийные данные из моего Arduino, используя Java.Я следовал учебному пособию Arduino и Java .

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

У меня есть предчувствие, что, если бы я изменил тип данных того, что я посылаю в байт, моя программа была бы в порядкеОднако мне нужна точность в данных, которые я передаю.Как мне решить эту проблему?

Ответы [ 2 ]

2 голосов
/ 12 декабря 2011

Последовательные протоколы, такие как протокол, используемый для последовательной передачи по USB, ориентированы на байты, а не на пакеты. Таким образом, нет никакой гарантии, что чтение вернет все «сообщение», отправленное другим концом, или только его часть, как вы наблюдаете, потому что нет понятия сообщения или пакета.

Вместо этого вам нужно каким-то образом разделять свои сообщения - например, добавляя символ новой строки - или предварительно отправлять сообщения с полем длины, чтобы вы знали, сколько байтов нужно прочитать.

0 голосов
/ 28 апреля 2012

Я делаю это, заставляя мой Arduino отправлять «кадры», разделенные «пробелом». Легко настроить время ожидания (по крайней мере, в Perl) для чтения данных с последовательного порта. Итак, что я делаю:

  • Разрешить чтение данных в течение продолжительности фрейма данных плюс дополнительные несколько миллисекунд:

    [ (number of bytes) × 10 bits × 1000 ms / (baud rate) ] + 100 milliseconds

  • Тогда интервал между двумя значениями или отправляемыми кадрами должен быть больше этого значения.

  • Программа легко синхронизируется с потоком данных благодаря стратегическому таймауту.
  • Я также добавляю простую преамбулу в мои данные для проверки целостности данных.
...