개발자/Arduino

format을 가진 출력을 위한 sprintf( ), dtostrf( )

지구빵집 2020. 10. 7. 20:29
반응형

 

 

아두이노에서 직렬 통신 또는 LCD 등에 문자열을 출력할 수 있다. 이때, format을 가진 내용을 단순히 print( )라는 함수만으로 구현하기는 귀찮은 면이 있다. 이때 사용하는 함수가 sprintf( )이다. 이 함수는 아두이노를 구성하는 AVR에서 제공하는 함수이다. 

 

int sprintf( char *buffer , const char *format[,argument]...)

 

C-언어에서 printf( )가 문자열을 화면에 출력하는데 비해 sprintf( )는 첫번째 매개변수인 buffer에 출력한다. 즉, 출력할 내용이 문자열 buffer에 저장된다. 이 문자열 buffer[ ]를 전송하면 format이 있는 양식으로 직렬포트 또는 LCD에 출력할 수 있다. 

 

char buffer[20];
int num1 = 12345;
char c = 'A';
char str[] = "Hello";
sprintf(buffer , "%6d , %x, %c, %s", num1, num2, c, str);

Serial.print(buffer);

 

그런데 아두이노에서는 실수(float, double)를 sprintf( )로 출력하면 정상적인 값이 출력되지 않고 '?'가 출력된다.

이 때 dtostrf( )를 이용하여 실수를 문자열로 변환한 후 sprintf( ) 등으로 format을 지정할 수 있다.

 

char* dtostrf( double _val, signed char _width, unsigned char _prec, char *_s)

_val : 변환하고자 하는 double, float 데이터

_width : 소수점을 포함한 전체 자릿수

_prec : 소수점 이하 자릿수

_s : 변환된 문자열. 문자열을 선언할 때 적어도 _width+1 이상의 크기를 가져야 정상적으로 저장된다. 

 

char temp[20];
char buffer[20];
int i = 123;
float f = 32.4;
char c = 'A';
char str[] = "Hello";

dtostrf(f, 4, 1, temp);
sprintf(buffer, "%d , %s , %c , %s", i, temp, c, str);

Serial.print(buffer);

 

 

 

앵무새 세마리

 

 

 

 

반응형