MyTetra Share
Делитесь знаниями!
Функция Arduino, аналогичная printf(), для печати в COM-порт
Время создания: 28.11.2021 21:34
Текстовые метки: arduino, вывод, печать, последовательный, COM, порт, printf, форматированный вывод
Раздел: Компьютер - Аппаратное обеспечение - Arduino / Atmega8 - Программирование Arduino / Atmega8
Запись: xintrea/mytetra_syncro/master/base/1638124468p1e0kr5y3m/text.html на raw.github.com

В стандартном наборе функций Arduino есть функции вывода значений на COM-порт, размещаемые в стандартном объекте Serial:



Serial.print("U=");

Serial.print(u);

Serial.print("V f=");

Serial.print(f);

Serial.println("KHz");



Однако эти функции выводят только одно значение, и не поддерживают форматированный вывод.


Решить эту проблему можно с помощью следующей функции:



/*

* SerialPrintf

* Реализует функциональность printf в Serial.print

* Применяется для отладочной печати

* Параметры как у printf

* Возвращает

* 0 - ошибка формата

* отрицательное чило - нехватка памяти, модуль числа равен запрашиваемой памяти

* положительное число - количество символов, выведенное в Serial

*/

const size_t SerialPrintf (const char *szFormat, ...) {

va_list argptr;

va_start(argptr, szFormat);

char *szBuffer = 0;

const size_t nBufferLength = vsnprintf(szBuffer, 0, szFormat, argptr) + 1;

if (nBufferLength == 1) return 0;

szBuffer = (char *) malloc(nBufferLength);

if (! szBuffer) return - nBufferLength;

vsnprintf(szBuffer, nBufferLength, szFormat, argptr);

Serial.print(szBuffer);

free(szBuffer);

return nBufferLength - 1;

}



// Пример использования SerialPrintf

void setup() {

Serial.begin(19200);

SerialPrintf("%d %s = 0x%04X hex\n", 321, "decimal", 321);

}



Следует обратить внимание, что эта функция не добавляет функциональности самому объекту Serial, а просто существует как функция с именем SerialPrintf (без точки "." между Serial и Printf).



Так же в этом разделе:
 
MyTetra Share v.0.58
Яндекс индекс цитирования