728x90

아두이노와 컴퓨터가 시리얼 통신으로 화면에 출력하는 것을 Arduino Serial Communication - output에서 했었다.

이번에는 아두이노와 컴퓨터가 시리얼 통신을 해서 아두이노로 화면에 출력하는 것을 보도록 하겠다.


int num;
void setup() {
Serial.begin(9600);
}

void loop() {
Serial.print("this number : ");
Serial.println(num++);
delay(500);
if(Serial.available()){
Serial.print("input data :");
Serial.println(Serial.available());
}
}

이 코드를 한번 보도록 하자. 이 코드에서 새로보는 메소드가 있다면 바로 available이라는 메소드이다.

이 메소드는 현재 키보드로 입력된 문자의 갯수를 저장된다. 당연히 입력된 문자가 없으면 0이 리턴된다.

C++에서는 0은 false로 취급하므로 즉 입력된 문자가 없다는 의미는 return이 false라는 뜻이다.

만약 available이 있으면 1이상이되고 숫자가 존재하면 true이므로 if문을 실행하게된다.

즉 실행하면 아래와 같이 실행이 된다.


보다시피 한개를 입력하면 1이올라가고 3개를 입력하면 3이 올라간다.

참고로 한글의 경우 utf8을 사용하므로 한글자당 3이올라간다.

즉 바이트 단위로 저장되는것을 알 수 있다.



이제 우리가 입력을 하면 그게 어딘가에 저장된다는걸 알 수 있다.

따라서 이번에는 그 저장된걸 꺼집어내서 써보도록 하자.

int num;
void setup() {
Serial.begin(9600);
}

void loop() {
Serial.print("this number : ");
Serial.println(num++);
delay(500);
if(Serial.available()){
char ch = Serial.read();
Serial.println(ch);
}
}

Serial.read라는 함수를 사용하면 저장되어있는 문자를 하나씩 꺼집어내서 사용할 수 있다.

예를들어 abc라는 3가지의 문자가 등록되어있다면 제일 처음 넣은 a를 꺼낸다.

그 다음 호출하면 b를 꺼내는 형식으로 되어있다. 문제는 하나씩 꺼내서 출력한다는 것이다.

이게 왜 문제가 되느냐하면 아래의 예제를 보자.


보다시피 한개를 입력할 때는 아무 문제가 없다.

그러나 여러개를 입력하면 하나씩 출력하게된다.

이 문제가 생기는 근본적인 원인은 Serial.read()가 하나씩 꺼내기 때문이다.

그래서 만약 한번 입력한걸 한번에 다 출력하게 하고싶다면 아래와 같이 사용해야한다.


int num;
void setup() {
Serial.begin(9600);
}

void loop() {
Serial.print("this number : ");
Serial.println(num++);
delay(500);
while(Serial.available()){
char ch = Serial.read();
Serial.println(ch);
}
}

이렇게 사용하면 if문을 쓸때 처럼 만약 available이 없다면 아예 while문이 시작하지도 않을 것이고,

여러개의 값이 들어왔다면 다 출력할 때까지 기다리기 때문이다.






+ Recent posts