Функция sprintf (Arduino)

Функция 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);

  1. а0 — число для преобразования
  2. 6 — кол-во элементов массива (символов числа)
  3. 2 — знаков после запятой
  4. a_0 — массив для хранения результата преобразования

Далее использую функцию sprintf выводим отформатированную строку:

sprintf(aux, «T1=%s T2= %u», a_0, a1);

 

Добавить комментарий

Войти с помощью: