Скажем, у меня есть некоторые переменные, которые я хочу распечатать на терминале, какой самый простой способ вывести их в строку?
В настоящее время я делаю что-то вроде этого:
Serial.print("Var 1:");Serial.println(var1);
Serial.print(" Var 2:");Serial.println(var2);
Serial.print(" Var 3:");Serial.println(var3);
Есть лучший способ сделать это?
Ответы:
ardprintf
это функция, которую я взломал вместе, которая симулируетprintf
через последовательное соединение. Эта функция (указана внизу) может быть вставлена в начало файлов, где эта функция необходима. Это не должно создавать никаких конфликтов.Это можно назвать похожим на
printf
. Посмотрите это в действии в этом примере:Ожидаемый результат:
Прототип функции:
Возвращает количество аргументов, обнаруженных в вызове функции.
Это определение функции:
** Чтобы напечатать
%
символ, используйте%%
. *Теперь доступно на Github Gists .
источник
Обычно я не ставлю два ответа на вопрос, но я только сегодня нашел это , где вы можете использовать printf без буфера.
Это все еще имеет ограничение с плавающей запятой.
редактировать: я думал, что я бы немного протестировать это, и это работает довольно хорошо. Я добавил лучший тест в цикл с форматированным выводом.
источник
serial_putchar
почему бы не сделать оператор returnreturn !Serial.write(c);
? Разве это не чище тривиального оператора для инвертирования смысла возвращаемого логического значения?serial_putchar
функцию. Это работает удовольствие. :-) Можете ли вы исправить ограничение с плавающей запятой ?Это, вероятно, не лучше, просто другое. Вы можете использовать объект String для вывода. Эти объекты позволяют объединять и поддерживать автоматическое приведение типов.
источник
Обычно я использовал вкладки, чтобы улучшить последовательность в последовательном. Выстраивание вещей, как я, позволяет arduino срабатывать как можно быстрее, при этом он может заметить определенные изменения в переменных.
Попробуйте что-то вроде этого:
Или как то так:
источник
Я использую это только для отладки, но:
источник
Я новичок в мире Arduino, но недавно я обнаружил, что это обычный C ++ (без исключений и, вероятно, полиморфизм). Но вы все еще можете наслаждаться шаблонами. Поэтому мое решение заключается в использовании следующих шаблонов:
Приятно, что здесь не используется дополнительная память и дополнительная обработка.
источник
Я обычно (мучительно) придерживаюсь нескольких строк,
Serial.print
но когда это становится запутанным, я возвращаюсь кsprintf
. Это раздражает тем, что у вас должен быть доступный буфер для этого.Использование так же просто (??) как:
Предупреждение, хотя (по умолчанию) не поддерживает плавающие типы.
источник
Использование
Streaming.h
вместоможно написать
Определение
<<
вStreaming.h
фактически переводит , что в серию обычныхSerial.print()
вызовов. То есть<<
является синтаксическим сахаром, реализованным без увеличения размера кода.Если вы не
Streaming.h
установили, получитеStreaming5.zip
от arduiniana.org . Разархивируйте его в директорию вашей библиотеки, например в~/sketchbook/libraries
. Добавьте линию#include <Streaming.h>
в эскизы, где вы используете<<
в качестве оператора потока.Предоставляются спецификаторы преобразования базы _HEX, _DEC, _OCT и _BIN, а также функция _FLOAT (с количеством десятичных знаков) и
endl
. Например, чтобы вывести значения широты и долготы в форме типа «Ваши координаты -23.123, 135.4567», можно написать:Это также может быть написано как
который будет хранить более длинную строку в PROGMEM вместо того, чтобы переносить ее в RAM.
Обратите внимание,
Streaming.h
что не создает никаких строк как таковых; он просто доставляет текст своих<<
аргументов в поток. Класс PString в arduiniana может построить строки из потока входов, если строки вместо поточного вывода желательны и необходимы.источник
Использование будет зависеть от типа данных ваших переменных.
Если бы они были
int
, это было бы,%d
или%i
если бы они былиstring
, это было бы%s
Упаковщик для печати
Вы можете изменить лимит в зависимости от ваших требований
Источник: https://playground.arduino.cc/Main/Printf
Примеры использования:
ESP8266
Его встроенный в
Serial
класс каркас. Нет необходимости в дополнительной библиотеке или функции.Подробнее о советах по форматированию на странице справки по формату printf: http://www.cplusplus.com/reference/cstdio/printf/
\n
является escape-последовательностью для перевода строки.Источник: http://en.cppreference.com/w/cpp/language/escape
[РЕДАКТИРОВАТЬ] - Как упомянул @Juraj, он недоступен на большинстве модулей AVR. Поэтому я добавил упоминание ESP8266 и оболочку printf для распространенных модулей AVR.
источник
Одним из возможных решений является:
Serial.println((String)"Var 1:" + var1 + " Var 2:" + var2 + " Var 3:" + var3);
источник
С http://playground.arduino.cc/Main/Printf Я заметил, что это нормально работает на моем mega2560
Вот и все, что сработало, нет необходимости в vsnprintf_P или PROGMEM ...
источник
printf()
себя ?Вы увидите на терминале:
источник
+
оператором.