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 (просто деталь)
Что мне делать?
@Yug Ahuja, 👍1
Обсуждение3 ответа
Лучший ответ:
Предыдущие операторы печати следующие:
Serial.println("Successfully connected to ");
Serial.print(WIFI_SSID);
SSID не будет завершен новой строкой. Возможно, вы имели в виду:
Serial.print("Successfully connected to ");
Serial.println(WIFI_SSID);
?
При отправке текста по последовательной линии принято
завершайте каждую строку каким-либо маркером конца строки: вы печатаете
какой-то текст, и сразу после него 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
В продолжение предыдущего ответа, ваше решение:
- измените предыдущий 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
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- Ошибка "'Serial' does not name a type"
- Построение графика на Python с использованием Tkinter Canvas
- Команда strtok() с Serial связью
- Как отправить целое число через pyserial с Python на Arduino и получить тот же результат?
- Сделать плату Arduino одновременно и USB-накопителем, и клавиатурой?
- Ошибка 'Serial' was not declared in this scope
- Как изменить переменную при нажатии кнопки, подключенной к контакту 2
Вам нужно быть _гораздо_ более конкретным, чтобы на ваш вопрос можно было ответить. Та же строка? То же, что и что? Пожалуйста, опубликуйте минимальный проверяемый эскиз, показывающий проблему, расскажите нам, что вы ожидали получить на выходе, и расскажите, каков был фактический результат., @Edgar Bonet
@EdgarBonet сделано, @Yug Ahuja