#1 2016-10-28 16:54:27

AlexPi
Учасник
Зареєстрований: 2016-10-06
Повідомлень: 4

Функция sprintf

Всем добрый день!
Для для вывода в последовательный порт строки содержащей значения переменных питался воспользоваться функцией sprintf.
Но увы ничего не получилось в месте где должны содержаться значения переменных подставляются пробелы оканчивающиеся знаком '?'.

Вроде ничего сложного в сети полно примеров, а не получается. Главное все компилируется без ошибок. Подскажите пожалуйста может кто сталкивался с подобной проблемой?
вот к примеру:

#include <stdio.h>
...

void loop()
{
   char buffer[12];
   float value = 12.987;
   sprintf(buffer, " % 8.3f", value );
   Serial.println(buffer);
}

В порт выкидывает: "       ?".
Я ожидал увидеть примерно такое: "   12.987"

Имею довольно приличный стаж разработки электронных устройств на базе МК. С ардуино начал работать не давно.
Данную функцию не раз использовал на чистом Си, проблем не было.

Неактивний

#2 2016-11-03 22:19:34

nitrometall
Учасник
Зареєстрований: 2016-11-03
Повідомлень: 3

Re: Функция sprintf

тоже мучаюсь с этим делом, ни фига не выходит)), будут сдвиги, пиши

Неактивний

#3 2016-11-05 22:29:37

Saddamko
Учасник
Зареєстрований: 2016-10-20
Повідомлень: 23

Re: Функция sprintf

Пишут, что в Aрдуино не реализован sprintf с %f, вроде по соображениям быстродействия - чтобы обойти эту проблему, предлагаю попробовать другой способ вывода float:

#include <stdio.h>

// the setup routine runs once when you press reset:
void setup() {
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
}

// the loop routine runs over and over again forever:

void loop()
{
char buffer[12];
float value = 12.987;

char str_temp[6];

/* 4 is mininum width, 2 is precision; float value is copied onto str_temp*/
dtostrf(value, 5, 3, str_temp);
sprintf(buffer,"%s F", str_temp);

Serial.println(buffer);
}

Остання редакція Saddamko (2016-11-05 22:29:51)

Неактивний

#4 2016-11-06 00:52:52

nitrometall
Учасник
Зареєстрований: 2016-11-03
Повідомлень: 3

Re: Функция sprintf

спасибо! получилось!))))

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму