반응형
아두이노에서 직렬 통신 또는 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' 카테고리의 다른 글
Decoding and Encoding JSON with Arduino Nano 33 IoT 3 (0) | 2020.10.12 |
---|---|
Decoding and Encoding JSON with Arduino Nano 33 IoT 1 (0) | 2020.10.10 |
Decoding and Encoding JSON with Arduino Nano 33 IoT 2 (0) | 2020.10.09 |
ArduinoJson 데이터의 Decoding / Ecoding 예제 (0) | 2020.10.08 |
SSD1306 OLED 로 LM35 온도센서 값을 디스플레이 (0) | 2020.10.07 |
달리기와 술자리도 마다하고, 여기까지 돌아가는 코드 (0) | 2020.10.06 |
Nano 33 IoT 보드 온도 습도 센서 dht11 테스트 (0) | 2020.10.06 |
Nano 33 IoT 보드 간단한 서버 만들고 AP로 동작 (0) | 2020.10.03 |
더욱 좋은 정보를 제공하겠습니다.~ ^^