|
|||||||
Функция 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). |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|