아두이노와 컴퓨터가 시리얼 통신으로 화면에 출력하는 것을 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문이 시작하지도 않을 것이고,
여러개의 값이 들어왔다면 다 출력할 때까지 기다리기 때문이다.
'Microprocessor > Arduino' 카테고리의 다른 글
Arduino PWM(아날로그처럼 출력하기) (0) | 2018.04.03 |
---|---|
Arduino LED 켜기(저항,LED,digital출력) (0) | 2018.04.02 |
Arduino Serial Communication - output (feat.delay) (0) | 2018.04.02 |
Arduino 기본 코딩 방식 (0) | 2018.04.02 |
[Board]Arduino DUE (0) | 2018.04.02 |