https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=kaiserkhan21&logNo=221042305919
아두이노에서 직렬통신 또는 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);
'Arduino' 카테고리의 다른 글
Arduino 특정시간 제어와 릴레이 다루기 (0) | 2022.10.23 |
---|---|
String 클래스 (0) | 2022.03.13 |
Serial 내부 라이브러리 (0) | 2022.03.13 |
Arduino and Visual Basic Part 3: Controlling an Arduino (0) | 2022.03.13 |
Arduino and Visual Basic Part 2: Receiving Data From the Arduino (0) | 2022.03.13 |