Функция sprintf возвращает отформатированную строку. Вывод строки производится в массив. Функция sprintf дает самые широкие возможности для преобразования данных в строку. Платформа Ардуино в функции sprintf не поддерживает формат чисел с плавающей запятой.
Пример использования:
#include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27,16,2); void setup(){ Serial.begin(9600); lcd.init(); lcd.backlight(); } void loop(){ char aux[16]; int a0 = 22; int a1 = 31; sprintf(aux, "T1 = %d T2 = %d", a0, a1); Serial.println(aux); lcd.setCursor(0, 0); lcd.print(aux); delay(1000); }
Как видно на примере функция sprintf выводит строку в монитор порта.
char aux[16]; int a0 = 22; int a1 = 31; sprintf(aux, "T1 = %d T2 = %d", a0, a1); Serial.println(aux);
Для правильной работы функции sprintf необходимо создать массив число элементов которого равно или больше числу элементов выводимой строки.
char aux[16];
Далее создаем для примера две переменные:
int a0 = 22;
int a1 = 31;
Которые для примера содержат данные о температуре с двух датчиков.
sprintf(aux, «T1 = %d T2 = %d», a0, a1);
Создаем строку, данные заносятся в массив aux.
T1 = %d T2 = %d — текст строки, а %d — команда форматирования, которая определяет формат и вывод переменной массива.
a0, a1 — переменные массива
Команда форматирования:
Тип формата | Тип выходных данных |
c | Символ |
s | Символьная строка |
d, i | Целое десятичное число |
u | Целое без знаковое десятичное число |
o | Целое восьмеричное число |
x | Целое шестнадцатеричное число |
Как видно из примера скетча, отформатированная строка выводится на LCD1602:
Так как отформатированная строка уже создана, то для вывода на дисплей целой строки с текстом и изменяемыми значениями достаточно вывести содержимое массива aux:
lcd.print(aux);
Ниже показан пример вывода строки с отражением чисел в щеснадцатиричном формате:
#include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27,16,2); void setup(){ Serial.begin(9600); lcd.init(); lcd.backlight(); } void loop(){ char aux[16]; int a0 = 22; int a1 = 31; sprintf(aux, "X1=0x%x X2=0x%x", a0, a1); Serial.println(aux); lcd.setCursor(0, 0); lcd.print(aux); delay(1000); }
Еще один пример вывода отформатированной строки на примере вывода времени:
#include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27,16,2); void setup(){ Serial.begin(9600); lcd.init(); lcd.backlight(); } void loop(){ char aux[16]; int hh = 22; int mm = 3; int ss = 8; sprintf(aux, "%02d:%02d:%02d", hh, mm, ss); Serial.println(aux); lcd.setCursor(0, 0); lcd.print(aux); delay(1000); }
Как видно команда sprintf не только подставила числа в нужные места, но и добавила ведущий ноль перед цифрой. Команда форматирования %02d выводит минуты и секунды с нулями, если значение минут или секунд меньше 10, при этом для вывода часов так же используется команда форматирования %02d, но так значение часов больше или равно 10, ноль в начале числа не выводится, так как число ограничено двумя символами.
Ранее отмечалось платформа Ардуино в функции sprintf не поддерживает формат чисел с плавающей запятой. Но для вывода чисел с плавающей запятой можно использовать функцию dtostrf.
Функция dtostrf, преобразует данные с плавающей точкой в массив символов.
#include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27,16,2); void setup(){ Serial.begin(9600); lcd.init(); lcd.backlight(); } void loop(){ char aux[16]; float a0 =-25.25; int a1 = 31; char a_0[6]; dtostrf(a0, 6, 2, a_0); sprintf(aux, "T1=%s T2= %u", a_0, a1); Serial.println(aux); lcd.setCursor(0, 0); lcd.print(aux); delay(1000); }
Для преобразования числа с плавающей запятой функция dtostrf использует несколько параметров и массив для хранения итога преобразования.
У нас есть число:
float a0 =—25.25;
которое содержит 6 символов.
Под это число создается массив:
char a_0[6];
Далее производится само преобразование числа массив char.
dtostrf(a0, 6, 2, a_0);
- а0 — число для преобразования
- 6 — кол-во элементов массива (символов числа)
- 2 — знаков после запятой
- a_0 — массив для хранения результата преобразования
Далее использую функцию sprintf выводим отформатированную строку:
sprintf(aux, «T1=%s T2= %u», a_0, a1);