printf в Print
- Войдите на сайт для отправки комментариев
Втр, 28/01/2020 - 06:32
Новичкам, задолбавшимся печатать бесконечные Serial.print() да Serial.println() c каждой переменной, которую они хочут вывести, могу посоветовать открыть файл Print.h и в описание класса в конец вставить вот это
size_t printf(const char *format, ...) {
const uint8_t MAX_STRING_SIZE = 64;
char buf[MAX_STRING_SIZE];
va_list args;
va_start(args, format);
vsnprintf(buf, MAX_STRING_SIZE, format, args);
va_end(args);
return print(buf);
}
и тогда все свои переменные можно писать в одну строчку со всеми плюшками стандартной функции printf()
Описание форматов можно почитать у DIHALT: http://we.easyelectronics.ru/Soft/formatnyy-vyvod-na-si-dlya-mikrokontrollerov.html
Теперь лехко можно писать
const uint8_t ARRAY_SIZE = 100;
int Array[ARRAY_SIZE];
for (uint8_t i = 0; i < ARRAY_SIZE; i++) Array[i] = 10*i;
const char *Prompt = "Line";
for (uint8_t i = 0; i < ARRAY_SIZE; i++) {
Serial.printf("%s%-3d: Array[%d] = \t%d\n", Prompt, i + 1, i, Array[i]);
}
Если возникнут затруднения со вставкой, пишите, я покажу куда.
Дед, ну в первых в h, по взрослому, надо тока описание воткнуть, а код в cpp
и во вторых, этож все до первого обновления/переустановки.
а так да КЛАСС!
Для классов в .h файле допустима и реализация. Например, шаблонные классы по другому и не сделаешь.
Ну, а при переустановке 5 строк сохранить, наерна, не проблема. А можно просто принцип понять и сделать так же потом, если штучка реально полезная. Мне вот для отладки пригождается, а в конечном коде, абычна, и сериала-то нет. :-)
Вставил в конец файла
перед последней скобкой "};", после строки "virtual void flush() { ..."
size_t printf(const char *format, ...) { const uint8_t MAX_STRING_SIZE = 64; char buf[MAX_STRING_SIZE]; va_list args; va_start(args, format); vsnprintf(buf, MAX_STRING_SIZE, format, args); va_end(args); return print(buf); } }; #endifРезультат
error: 'class HardwareSerial' has no member named 'printf'; did you mean 'print'? Serial.printf("%05d\n", ui16); ^~~~~~ print exit status 1 'class HardwareSerial' has no member named 'printf'; did you mean 'print'?Что сделал не так?
у меня вставлено так
size_t println(void); // существующая строка size_t printf(const char *format, ...) { const uint8_t MAX_STRING_SIZE = 64; char buf[MAX_STRING_SIZE]; va_list args; va_start(args, format); vsnprintf(buf, MAX_STRING_SIZE, format, args); va_end(args); return print(buf); } virtual void flush() { /* Empty implementation for backward compatibility */ } // существующая строкаvirtualvoidflush() {/* Empty impl..."нуууу, у мня VisualMicro, я написал #include <Print.h>, нажал правой кнопочкой на ней да выбрал "Открыть документ", оно мне сразу правильное и открывается. :) Как там в Arduino IDE - я, слава богу, не знаю. :)
От тут про форматный вывод лучше написано http://microsin.net/programming/ARM/secrets-of-printf.html