[아두이노 기초] 전체 글 목록


전시간에 우리는 LCD창에 메시지를 출력해보았습니다. 하지만 정보를 변경하려면 코드를 직접수정해줘야 했죠. 그래서 이번시간에는 sprintf라는 것을 활용하여 변경되는 정보를 LCD창에 출력해보도록 하겠습니다.

그렇다면 sprintf는 무엇일까요?

str이 가리키고 있는 배열에 문자열을 입력하는 것이라고 생각하면 됩니다.

printf를 썻을때는 화면에 문장이 출력되었다면 sprintf는 화면대신 str배열에 문장이 출력되는 것이지요. 이때 주의할점이 있습니다. sprintf는 str배열의 끝에 NULL을 추가하기 때문에 공간의 여유가 필요합니다.

#include <stdio.h>

int sprintf ( char * str, const char * format, ... );

회로구성은 아래 자료를 확인해주세요!

2017/07/31 - [[아두이노]] - 아두이노 기초 9. LCD디스플레이 제어하기


그럼이제 코드를  수정해봅시다. 지난시간에 했던 LCD창에 메시지를 출력하는 코드입니다.

void setup()

{

Serial.begin(9600);

}

 

void loop()

{

Serial.print("$CLEAR\r\n");

Serial.print("$GO 1 4\r\n");

Serial.print("$PRINT Welcome to\r\n");

Serial.print("$GO 2 4\r\n");

Serial.print("$PRINT Sizz blog\r\n");

delay(1000);

}

Serial.print()안에 문자열을 입력하여 출력하고 있습니다. 우리는 Serial.print()를 사용하기전에 문자열에 원하는 내용을 미리 완성 시킬 것입니다. 

예를들어 sprintf(str,"$PRINT Welcome to %d\r\n", number);  이런식으로 문장안에 숫자형 자료를 추가할수 있게 되죠.

int count=0;

char str[40];

void setup()

{


  Serial.begin(9600);


}


void loop()

{

  sprintf(str,"$PRINT COUNT : %d \r\n",count++);//str에 숫자count저장

  Serial.print("$CLEAR\r\n");

  Serial.print("$GO 1 3\r\n");

  Serial.print(str);//str문자열 자체를 출력

  Serial.print("$GO 2 3\r\n");

  Serial.print("$PRINT Sizz blog\r\n");

  delay(1000);

}

count = 0 이라 변수를 선언후 1씩증가시키며 그것을 LCD로 보여주는 코드입니다.

str[40](배열의 크기를 적절히  설정하지 않으면 count가 초기화 될수 있습니다.) 문자열에 COUNT : %d(count)를 저장한뒤 Serial.print(str)로 str문자열 전체를 출력해주고 있죠. 이처럼 sprintf를 할때 LCD 시리얼 관련 코드 ex)$PRINT 를 추가하여 사용하시면 됩니다.


[아두이노 기초] 전체 글 목록


아두이노는 Character LCD를 지원합니다. 시리얼 방식과 패러럴 방식 2가지가 있는데 패러럴 방식의 LCD모니터를 사용할 경우 데이터송신핀 4개, RS(Register Select), R/W(ReadWrite), Enable등의 제어 핀이 추가로 필요하기 때문에 번거로운 점이 있어 우리는 시리얼 방식의 LCD를 사용하도록 하겠습니다.

시리얼 LCD 디스플레이는 데이터 송시에 1개의 데이터  선만 있으면 되고 Serial.print()명령어로 쉽게 문자표시가 가능합니다. 시리얼 LCD 디스플레이 기능을 지원하기 위해서는 시리얼LCD 제품에 시리얼 통신으로 데이터를 수신해서 LCD에 대신디스플레이를 해주는 별도의 마이크로 프로세서가 필요합니다. 우리가 사용할 시리얼 LCD 디스플레이 제품은 이미 이러한 기능이 포함되어 있는 마이크로 프로세서가 장착 되어 있습니다.


1. 시리얼 LCD 디스플레이 제어하기

회로를 보시면 5v전원, gnd를 각각+,-에 연결하여 lcd의 전원을 공급하고 있습니다. 그리고 LCD왼쪽위를 보시면 Rx라는게 보입니다.

Rx는 수신부, Tx는 송신부로 데이터를 주고 받을때 사용합니다. 아두이노에는 0(Rx),1(Tx)번핀이 바로 그것이죠. 그렇다면 아두이노와 lcd가 서로 데이터를 주고받으려면 어떻게 해야할까요? 아두이노에서는 송신을하고 LCD에서는 수신을 해야 합니다. 그렇기때문에 아두이노의 Tx와 LCD의 Rx가 연결되어 있는 것이죠.

코드는 매우 간단합니다.

void setup()

{

Serial.begin(9600);

}

 

void loop()

{

Serial.print("$CLEAR\r\n");

Serial.print("$GO 1 4\r\n");

Serial.print("$PRINT Welcome to\r\n");

Serial.print("$GO 2 4\r\n");

Serial.print("$PRINT Sizz blog\r\n");

delay(1000);

}

LCD디스플레이를 제어하는데에 Serial.print()함수가 사용됩니다. 이때 시리얼창에 출력할때와 다른점이 있는데 문장의 시작에 $를 붙인뒤 하고싶은 명령을 쓰는 것입니다. 그럼 시리얼프린트로 LCD제어하는 명령어를 좀더 자세히 알아 보도록 합시다.

$CLEAR : LCD디스플레이 초기화

$GO x y : LCD디스플레이에 x축 y축 위치로 커서 이동

$PRINT : print 뒤에 오는 문장을 LCD디스플레이에 출력

펌웨어 업로드 후 실행해보면 LCD에 Welcome to Sizz blog가 잘 출력되는걸 볼수 있을 겁니다.


현재는 고정된 문자열만 출력할수 있습니다. 하지만 변화하는 정보를 출력하고 싶을때는 어떻게 해야 할까요? 다음 장에서는 sprintf를 이용하여 변하는 정보를 출력하는 것에 대해 알아보도록 하겠습니다.


+ Recent posts