Отлавливание символа конца строки в Serial

forfrends
Offline
Зарегистрирован: 24.02.2015

Всем добрый день!

В Serial с компьютера передаю строки длинной 1-5 символов. Ардуино собирает переданные символы в строки, дальше Ардуино должна их обрабатывать, но здесь возникла проблема. Ардуино не видит символа конца строки (или может он не передается?).

Пробовал такие варианты: '\n'   '\0'   '\r'

...
while (Serial.available() > 0) {
    char c = Serial.read();
    if (c == '\n') { 
    ...

Строка собирается правильно, но отлавливание символа конца строки не происходит. Пробовал через сторонний терминал, результат тот же. В чем может быть проблема? Почему не получается поймать символ конца строки? Может он какой-то другой? 

Передавать свой спец.символ для отслеживания конца строки - не подходит.

P.S. немного поковырял терминал... выходит что сам терминал не передает символ конца строки.. Блютуз терминал то же самое... 

что можете посоветовать?

sadman41
Offline
Зарегистрирован: 19.10.2016

А нечего тут советовать... Суйте в конец строки `\n`

b707
Offline
Зарегистрирован: 26.05.2017

>>>>> Передавать свой спец.символ для отслеживания конца строки - не подходит.

почему?

Так или иначе - если терминал не передает конец строки. то его придется либо добавлять вручную. либо в данных просто передусмотреть свой терминальный символ

forfrends
Offline
Зарегистрирован: 24.02.2015

Передавать свой символ не подходит из-за того что иногда команды нужно самому в терминал вводить. И каждый раз вводить какой-то спец. символ не очень удобно...

Но похоже от этого никуда не деться. Либо, как вы и говорите, настроить терминал на передачу спец.символа, но увы не все терминалы это могут.

В общем вопрос ясен. Всем спасибо!

nik182
Offline
Зарегистрирован: 04.05.2015

forfrends
Offline
Зарегистрирован: 24.02.2015

Это настройка для именно этого термината. Большинство мобильных терминалов не имеют вообще никаких настроек.

b707
Offline
Зарегистрирован: 26.05.2017

forfrends пишет:

Большинство мобильных терминалов не имеют вообще никаких настроек.

я сильно в этом сомневаюсь, так как настройка конца строки - базовая для терминала. В конце концов. если один терминал не имеет таких настроек - возьмите другой. их сотни

sadman41
Offline
Зарегистрирован: 19.10.2016

Могу предложить еще два способа, один попроще, другой повеселее:

1) По приходу первого байта заводим таймер и после истечения NN ms считаем, что команда принята. Обрабатываем, реинитим анализатор;

2) Анализируем каждый раз принятую строку с допустимыми командами/параметрами. По первому несовпадению - реинит анализатора.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

я делаю так:

0x27   0x04  0x00 .... 0x00

первый байт управляющий символ - начало посылки

второй байт кол-во байтов в посылке

далше сами байты

DenKis
Offline
Зарегистрирован: 20.05.2015

Убил кучу времени, что бы отладить протокол NMEA - ручками по умолчанию передавался только один символ. Спасибо огромное!

DenKis
Offline
Зарегистрирован: 20.05.2015

Убил кучу времени, что бы отладить протокол NMEA - ручками по умолчанию передавался только один символ. Спасибо огромное!