Как отобразить переменные с плавающей запятой на OLED-дисплее (0,96 дюйма)

У меня проблема, похожая на обсуждаемую здесь: как отобразить переменные на OLED 0,96 "с помощью библиотеки u8glib?

Я хотел бы знать, как я могу показывать переменные с плавающей запятой вместо переменных int. Что я должен изменить в этой части моего кода?

char buf[9];
sprintf (buf, "%d", a);
u8g.drawStr(18, 3, buf);

} while( u8g.nextPage() );

delay(200);

}

Заранее спасибо = D

, 👍1

Обсуждение

Этот код работает для вас? Если нет, то что происходит не так?, @chrisl

да, это работает, но только с переменными типа int =/. когда я пытаюсь плавать, это не работает., @Daniel Oliveira

Что значит "не работает"? Пожалуйста, опишите, что происходит на самом деле, @chrisl


2 ответа


1

Группа функций printf в библиотеке Arduino не реализует преобразования с плавающей запятой и double. Для этого вам понадобится функция

char *dtostrf(double dval, int8_t width, uint8_t prec, char *buf);
  Convert the double value passed in dval into an ASCII string stored in
  buf. Conversion is done as "[-]d.ddd". The minimum field width of the output
  string (including the '.' and the possible sign for negative values) is given
  in width, and prec determines the number of digits after the decimal. width
  is signed, negative for left adjustment.
  Returns buf.

, который вам нужно будет вызывать для каждого числа с плавающей запятой, которое вы хотите преобразовать.

Обратите внимание, что вы можете предварительно преобразовать несколько значений с плавающей запятой в строки, каждое в свой собственный символьный буфер, а затем использовать sprintf для форматирования конечного буфера - помня, что в строке формата sprintf эти буферы содержат символьные строки, которые вам нужно указать с помощью спецификации формата '%s'.

,

0

Библиотека u8glib предоставляет стандартную функцию печати Arduino() метод. Вы можете написать:

u8g.setPrintPos(18, 3);
u8g.print(a);

и это должно работать в основном для любого типа А.

,