- If you can try to use sprintf() to convert from a float to a string on Arduino, it doesn't work.
The function sprintf() return a "?" instead of float format.
The alternative to solve the problem is to use dtostrf(), the function in the avr-libc library.
아두이노에서 부동소수값 출력을 위해
sprintf( buf, "%f", 1.1f );
Srial.println( buf );
→ output : ?
위와 같이 sprintf() 함수를 사용한 경우 1.1이 아닌 "?" 가 출력된다.
정확한 결과를 위해
dtostrf() 함수를 사용
하여 해결 가능하다.
□ dtostrf() 개요
- dtostrf() 함수는 부동소수(double, float) 변수를 주어진 형식에 따른 문자열을 출력
- The dtostrf() function converts the double value passed in val into an ASCII representation that will be
stored under s.
|
□ 매개변수 정의
매개변수 |
내용 |
|
double __val |
- 변경할 부동소수 - floatvar Float variable |
|
signed char __width |
- 음수부호(-)와 소수점을 포함한 전체 자리수 - StringLengthIncDecimalPoint It is the length of the string will be created |
소수점 포함, 음수는 (-)포함 |
unsigned char__ prec |
- 소수점을 제외한 소수점 자릿수 - numVarsAfterDecimal The number of digits after the dicimal point |
소수점 제외 |
char * __s |
- 문자열 버퍼 ( char buffer ) - charbuf The char array to store the result |
|
□ dtostrf() 사례 ( Sample )
#include <stdio.h>
|
□ 결과 (Result)
dtostrf( 123.123 , 6, 2, CAa ) -> 123.12 // Normal. 정상 |
결과에서 알 수 있듯이 dtostrf()도 정확한 연산이 되는 것은 아니다.
그러나, dtostrf()를 sprintf() 대신 충분히 사용가능하다.
As the result, dtostrf () also is not working exactly.
But, however , the dtostrf () is fully available instead of sprintf().
'아두이노 > 일반' 카테고리의 다른 글
[브리핑] 아두이노 강좌 (0) | 2016.02.03 |
---|---|
Arduino Nano USB to Serial Port 설치-WCH CH340G (0) | 2014.12.31 |
I2C 통신 (0) | 2014.11.21 |
Arduino 사용자 라이브러리 작성법 (0) | 2014.11.16 |