Отлавливание символа конца строки в Serial
- Войдите на сайт для отправки комментариев
Всем добрый день!
В Serial с компьютера передаю строки длинной 1-5 символов. Ардуино собирает переданные символы в строки, дальше Ардуино должна их обрабатывать, но здесь возникла проблема. Ардуино не видит символа конца строки (или может он не передается?).
Пробовал такие варианты: '\n' '\0' '\r'
...
while (Serial.available() > 0) {
char c = Serial.read();
if (c == '\n') {
...
Строка собирается правильно, но отлавливание символа конца строки не происходит. Пробовал через сторонний терминал, результат тот же. В чем может быть проблема? Почему не получается поймать символ конца строки? Может он какой-то другой?
Передавать свой спец.символ для отслеживания конца строки - не подходит.
P.S. немного поковырял терминал... выходит что сам терминал не передает символ конца строки.. Блютуз терминал то же самое...
что можете посоветовать?
А нечего тут советовать... Суйте в конец строки `\n`
>>>>> Передавать свой спец.символ для отслеживания конца строки - не подходит.
почему?
Так или иначе - если терминал не передает конец строки. то его придется либо добавлять вручную. либо в данных просто передусмотреть свой терминальный символ
Передавать свой символ не подходит из-за того что иногда команды нужно самому в терминал вводить. И каждый раз вводить какой-то спец. символ не очень удобно...
Но похоже от этого никуда не деться. Либо, как вы и говорите, настроить терминал на передачу спец.символа, но увы не все терминалы это могут.
В общем вопрос ясен. Всем спасибо!
Это настройка для именно этого термината. Большинство мобильных терминалов не имеют вообще никаких настроек.
Большинство мобильных терминалов не имеют вообще никаких настроек.
я сильно в этом сомневаюсь, так как настройка конца строки - базовая для терминала. В конце концов. если один терминал не имеет таких настроек - возьмите другой. их сотни
Могу предложить еще два способа, один попроще, другой повеселее:
1) По приходу первого байта заводим таймер и после истечения NN ms считаем, что команда принята. Обрабатываем, реинитим анализатор;
2) Анализируем каждый раз принятую строку с допустимыми командами/параметрами. По первому несовпадению - реинит анализатора.
я делаю так:
0x27 0x04 0x00 .... 0x00
первый байт управляющий символ - начало посылки
второй байт кол-во байтов в посылке
далше сами байты
Убил кучу времени, что бы отладить протокол NMEA - ручками по умолчанию передавался только один символ. Спасибо огромное!
Убил кучу времени, что бы отладить протокол NMEA - ручками по умолчанию передавался только один символ. Спасибо огромное!