dtostrf() STM32 проблема
- Войдите на сайт для отправки комментариев
Втр, 16/11/2021 - 02:12
Всем привет. Помогите устранить проблему. Есть значение с датчика температуры "123.45", хочу получить целое число "123".
Использую dtostrf().
В результате в порту получаю значение "123.0" Такая беда только с платами STM32F103. Когда загружаю скетч в ProMini все ОК получаю "123".
В чем может быть проблема?
char temp = 123.56; void setup() { Serial.begin(9600); } void loop() { char temp_serial[20]; dtostrf( temp , 3, 0, temp_serial); Serial.println (temp_serial); }
Может быть потому что char дробным не бывает?
Видимо, внутри STM32 framework первый аргумент обрабатывается иначе, нежели внутри AVR libc.
Serial.println(int(temp));
Serial.println(int(temp));
Это так не работает. Это никак не работает, у него temp типа char.
Думаю это машинально написано.
Я хочу вывести значение на экране, использую библиотеку U8g2. Значение нужно выводить целым числом. Я не знаю как, возможно есть какие-то другие методы.
Пробовал использовать sprintf() но могу понять как оно работает.
char
temp = 123.56; это не число !!!
float
temp = 123.56; это число !!!
Извините перепутал.
Но когда даже
float
temp = 123.56;
То в консоли получаем "123.0"
Вы слепой ?
Вы не поняли проблему. Меня интересует функция dtostrf(). Для отображения данных на дисплее требуется тип данных char Поэтому я использую dtostrf().
В консоле "124.0"
...хочу получить целое число...
может вы задачу не правильно описали ?
все просто и понятно))
Serial.printf давно есть, даже на avr.
rkit ему надо символьное представление числа, а не вывод в serial ...
Спасибо . Все заработало.
Теперь возник вопрос, если я хочу получить значение с одним знаком после зяпятой. как должна выглядеть строка ???
sprintf(str,
"%i"
,
int
(temp));
У int не может быть дробной части. Ты что нибудь про типы данных знаешь? Прочитай учебник. Про типы. Про dtostrf , какой параметр отвечает за количество знаков после запятой у типа float. НЕ int.
код функции из официального ядра STM для ардуино:
видно что как минимум 1 цифра после запятой будет выведена
Разница между
и
только в том, что первая для temp = 123.52 выведет 123.0, а вторая 123.5
Вывод - функция dtostrf() предназначена для печати float - то есть чисел со знаками после точки. Если вам нужно печатать целое - то сначала переведите свое число в целое, а потом печататйте как целое - через sprintf, itoa и так далее
Ок, спасибо. Я получил ответ на все вопросы.