В строке появляется лишний символ /n

e-afen
Offline
Зарегистрирован: 04.10.2017

Команду по WiFi принимает esp-07 отдает ардуине, та обрабатывает отдает ответ обратно через SoftwareSerial, esp-07 добавляет перед началом команды свой IP адрес и отправляет по WiFi 

String msg = "";
char c;
void loop() {
 if (!client.connected()) {
    client = server.available();
  } else {
    while (client.available()) {
      Serial.write(client.read());
    }
String header =  '@'+WiFi.localIP().toString() +';';   //добавим IP с символами разделителями
    while (Serial.available()) {
      c = Serial.read();
      msg = msg + c;   //соберем команду от ардуины
      if (c == '\r') {  msg = header+msg; client.print(msg); msg = ""; c=0;}
    }
  }
}

но компьютер принимает строку  @192.168.1.1;<LF>255;255;255;ping<LF><CR> я никак не могу понять откуда после @192.168.1.1;  появляется <LF> и как от него избавиться

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

А что тут непонятного? В Винде конец строки это два символа <CR><LF>. В своем скетче в строке 14 вы ищете и удаляете символ <CR>  (или что то же самое - '\r'). А символ <LF> остается...

e-afen
Offline
Зарегистрирован: 04.10.2017

Читаем код внимательно 

String header =  '@'+WiFi.localIP().toString() +';';   //должно быть "@192.168.1.1;"                                                 ................

 

char c = Serial.read();
    msg = msg + c;   //посимвольно соберем все что приходит с ардуины до '\r' это признак конца команды
                               //"255;255;255;ping<LF><CR>"  - пример принятой строки
    if (c == '\r') {  
    msg = header+msg;   //"@192.168.1.1;255;255;255;ping<LF><CR>"  - должно быть
    client.print(msg);    //отдаем клиенту в WIFi
    msg = ""; c=0;}

 

а клиент принимает @192.168.1.1;<LF>255;255;255;ping<LF><CR>    вопрос в том откуда появляется <LF> после "@192.168.1.1;"

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

ептать, сначало запихал в строку '\r', а потом удивляется откуда оно там

char c = Serial.read();
if (c == '\r') {  
    msg = header+msg;   //"@192.168.1.1;255;255;255;ping<LF><CR>"  - должно быть
    client.print(msg);    //отдаем клиенту в WIFi
    msg = ""; c=0;
}  else {
    msg = msg + c;   //посимвольно соберем все что приходит с ардуины до '\r' это признак конца команды
                               //"255;255;255;ping<LF><CR>"  - пример принятой строки
}

 

e-afen
Offline
Зарегистрирован: 04.10.2017

Читай код !ВНИМАТЕЛЬНО! в каком месте "сначало запихал в строку '\r'"  ???? и потом я удивляюсь наличию лишнего символа '\n' 

xDriver пишет:

ептать, сначало запихал в строку '\r', а потом удивляется откуда оно там

char c = Serial.read();
if (c == '\r') {  
    msg = header+msg;   //"@192.168.1.1;255;255;255;ping<LF><CR>"  - должно быть
    client.print(msg);    //отдаем клиенту в WIFi
    msg = ""; c=0;
}  else {
    msg = msg + c;   //посимвольно соберем все что приходит с ардуины до '\r' это признак конца команды
                               //"255;255;255;ping<LF><CR>"  - пример принятой строки
}

 

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

да не туда глянул, пардон

давай весь код, по кускам не разберешься как отправляешь , как header формируется...

есть подозрение что сериал не вычищаешь и там остается символ, который ты потом удачно считываешь первым в msg

 по идее он должен быть '\n'.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

e-afen пишет:

я никак не могу понять откуда после @192.168.1.1;  появляется <LF> и как от него избавиться

1 . Не хами старшим.

2. Появляется из потока ввода,ровно остаток от предыдущего ввода.

3. Как избавиться - самое простое костыль:

вместо:

 msg = msg + c;   //соберем команду от ардуины

пишем:

 if (c !=10) msg = msg + c;   //соберем команду от ардуины, кроме LF, можешь еще что-то добавить в проверку. например isgraph(c) или !isctrl(c)

другой вариант, если ты пользуешься сериал-монитором из ИДЕ, то внизу справа поставть "Конец строки" только CR.

 

e-afen
Offline
Зарегистрирован: 04.10.2017

Да,  все верно, так и оказалось. Согласен по пункту 2 и 3 Всем спасибо тему можно закрыть.

А по пункту 1 не надо разводить "дедовщину" тем более когда "дед" не прав.  

wdrakula пишет:

e-afen пишет:

я никак не могу понять откуда после @192.168.1.1;  появляется <LF> и как от него избавиться

1 . Не хами старшим.

2. Появляется из потока ввода,ровно остаток от предыдущего ввода.

3. Как избавиться - самое простое костыль:

вместо:

 msg = msg + c;   //соберем команду от ардуины

пишем:

 if (c !=10) msg = msg + c;   //соберем команду от ардуины, кроме LF, можешь еще что-то добавить в проверку. например isgraph(c) или !isctrl(c)

другой вариант, если ты пользуешься сериал-монитором из ИДЕ, то внизу справа поставть "Конец строки" только CR.

 

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

e-afen пишет:

А по пункту 1 не надо разводить "дедовщину" тем более когда "дед" не прав.  

А ты чё такой, дерзкий? Ты какого сраёна? ;)

 

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

оставь молодого, видимо и не служил, и годков маловато.

мудрость придет сама, в виде белочки или озарения.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

e-afen пишет:

 когда "дед" не прав.  

Хрен-се, фразочка! Духи совсем оборзели! 

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

ЕвгенийП пишет:

e-afen пишет:

 когда "дед" не прав.  

Хрен-се, фразочка! Духи совсем оборзели! 

нарисуй ему зубной пастой на лбу "Чечня Ардуино - круто!".