Serial.println печатает сразу после предыдущей строки в той же строке

Я написал serial.println в своем коде, но строка была напечатана в той же строке на последовательном мониторе.

#include <WiFi.h>//для подключения esp32 к Wi-Fi

#include <TinyGPS++.h>//для получения данных GPS с GPS-модуля neo-6m

#define WIFI_SSID "Airtel_pawa_4182"//название Wi-Fi простыми словами
#define WIFI_PWD "Ahuja6230"//пароль Wi-Fi

TinyGPSPlus GPS;//создание объекта GPS из библиотеки tinygps++

void setup() {
 Serial.begin(9600);
  //настройка Wi-Fi{
  WiFi.begin(WIFI_SSID, WIFI_PWD);
  Serial.println("connecting to wifi");
  while(WiFi.status() != WL_CONNECTED){
   Serial.println(".");
   delay(1000);    
  }
  Serial.println("Successfully connected to ");
  Serial.print(WIFI_SSID);
  //}

  //настройка GPS{
  Serial2.begin(9600);
  delay(1000);
  Serial.println("ESP32-GPS Tracker");
  Serial.println("Initializing...");
  //}
}

void loop() {
}

В этом коде строка «esp32-gps tracker» выводится сразу после предыдущей строки в той же строке на последовательном мониторе.

Я пробовал запустить код снова и снова, но это не сработало...

Я использую плату esp32 (просто деталь)

Что мне делать?

, 👍1

Обсуждение

Вам нужно быть _гораздо_ более конкретным, чтобы на ваш вопрос можно было ответить. Та же строка? То же, что и что? Пожалуйста, опубликуйте минимальный проверяемый эскиз, показывающий проблему, расскажите нам, что вы ожидали получить на выходе, и расскажите, каков был фактический результат., @Edgar Bonet

@EdgarBonet сделано, @Yug Ahuja


3 ответа


Лучший ответ:

2

Предыдущие операторы печати следующие:

  Serial.println("Successfully connected to ");
  Serial.print(WIFI_SSID);

SSID не будет завершен новой строкой. Возможно, вы имели в виду:

  Serial.print("Successfully connected to ");
  Serial.println(WIFI_SSID);

?

,

0

При отправке текста по последовательной линии принято завершайте каждую строку каким-либо маркером конца строки: вы печатаете какой-то текст, и сразу после него EOL, чтобы обозначить, что «это теперь полная строка». Соответственно, метод Serial.println() печатает запрошенный текст, сразу за которым следует маркер EOL (в данном случае случай, CR+LF).

Из вашего вопроса следует, что вы, похоже, думаете, что EOL немедленно предшествует тексту. Это не так.

См. ответ JRobert, чтобы узнать правильный способ построения линии из нескольких операторы печати: println() следует использовать для последней части, а не для первый.

,

Да. Хорошее объяснение. Теперь я знаю, где я ошибся. Я думал, что при использовании "print.ln()" строка будет напечатана на новой строке (я получил эту информацию из Google). Но это не похоже на то, что print.ln предназначен для завершения строки и начала новой строки, @Yug Ahuja

Комментарий Jrobert был первым, который отметил мою ошибку, поэтому я объявил его ответом. Но я также благодарю вас за объяснение, @Yug Ahuja

@YugAhuja println, а не print.ln, вам нужно быть очень конкретным при кодировании., @Nick Gammon


1

В продолжение предыдущего ответа, ваше решение:

  • измените предыдущий Serial.print() на Serial.println() так, чтобы за этим текстом следовал конец строки, или
  • добавьте \n в начало строки, с которой у вас возникла проблема, чтобы она началась с новой строки, чтобы компенсировать «отсутствующую» новую строку в предыдущем Serial.print().
,

Для согласованности с тем, что делает Serial.println(), следует добавить "\r\n", а не только '\n'. Если вы когда-нибудь будете использовать эмулятор терминала вместо последовательного монитора Arduino, то голый '\n', скорее всего, переместит курсор на одну строку вниз, оставаясь в том же столбце., @Edgar Bonet

Зависит от вашей операционной системы. В Linux новая строка переходит на начало новой строки. В Windows YMMV. В коде Linux очень часто используется \n для новой строки при выводе, а не \r\n, что на самом деле может поместить какой-то странный символ (символ возврата каретки) в окно терминала., @Nick Gammon

@NickGammon: На терминале Linux один \n является вертикальным перемещением курсора. Когда программа выводит \n, драйвер tty преобразует его в \r\n до того, как он достигнет терминала. Это должно стать ясно, если вы попытаетесь использовать терминал с отключенной постобработкой вывода (stty -opost). Программа последовательной связи, такая как picocom, по умолчанию отключает всю обработку драйвера tty: байты от Arduino достигают терминала неизмененными. Это хорошо работает с Serial.println(), так как он заканчивает строку \r\n., @Edgar Bonet