본문 바로가기

아두이노(arduino)

아두이노 Serial.read / Serial.available 시리얼 입력

Serial.read 와 Serial.available 란?

Serial.print에 대해 포스팅을 했었습니다.

2022.12.28 - [아두이노(arduino)] - 아두이노 Serial.print 함수(시리얼 프린트 함수)

 

아두이노 Serial.print 함수(시리얼 프린트 함수)

Serial.print(시리얼 프린트)가 뭔가요? 예를 하나들어볼께요. 만약에 우리가 세탁기를 하나 만들었다고 가정을 해보겠습니다. 이 세탁기는 전원버튼 이외에 시작버튼 정지 버튼 밖에 없습니다. 세

ronco.tistory.com

 

정보를 모니터에 출력해 어떠한 상태인지 정보를 얻기 위해 사용했었습니다. 즉, 아두이노가 우리에게 어떠한 이야기를 해준것이었습니다. 이번엔 반대로 정보를 입력해보기로 합시다. 우리가 아두이노에게 정보를 주는것이되겠죠~

 

Serial.read 여기서 리드는 읽다 입니다. 여기서 무언가를 읽어오는것은 우리입장이 아닌 아두이노입장에서 read(리드-읽어오다) 가 되는 것 입니다.  

 

여기서 정보를 읽어오는 것 중 아주 중요한 함수 2가지가 필요한데 

 

Serial.available / Serial.read 함수가 되겠습니다. 

 

 

아두이노 rx 수신
아두이노 rx핀을 통해 정보를 입력받는다.

 

여기서 rx는 수신 즉 받는다는 뜻이고 사람이 입력한 정보를 아두이노가 받는다라는 뜻이되겠습니다. 사람의 입장이 아닌 아두이노의 입장으로 보셔야 됩니다.

나중에 따로 설명을 드리겠지만, 아두이노에서 rx이면 보내는쪽에서는 tx핀으로 연결해야합합니다.

 

즉  아두이노 tx    --  반대편 rx

      아두이노 rx   --   반대편 tx

 

위 사진을 보게 되면 0번 핀이 rx으로 되어있고, 가운데 지점을 보면 rx라고 적혀진 내장 led를 볼 수가 있습니다. 아두이노가 정보를 입력받을때, 해당 led가 점등되는 것을 볼 수 있습니다. (정상적으로 정보가 입력되는지 확인하기 위한용도의 led입니다.) 

제일처음에는 아두이노 와 컴퓨터간에 usb로 연결이 우선이겠죠??

 

Serial.print와 마찬가지로 Serial.read역시 Serial.begin()함수를 먼저 사용해야합니다.

 

아두이노 ide(스케치프로그램)우측 상단에 보면 돋보기 모양이 시리얼모니터인데 모니터로 정보를 주고 받으려면 먼저 사용할 수있게끔 하는 설정입니다. 

 

순서로 보면 아래와 같습니다.

char val = 0; // 문자를 저장하는 변수 val를 만듭니다.

 

 

void setupo(){

Serial.begin(9600);   // 시리얼모니터를 사용하고, 송수신 속도를 9600으로 설정합니다.

}

 

void loop(){

if(Serial.available()) {       // 만약에 시리얼 모니터를 통해 도착한 문자가 있는지, 즉 정보가 입력이 됐는지 확인합니다. 

                                  val = Serial.read();  //  입력된 정보를 읽어오고, 처음에 만든 val이라는 변수안에 대입합니다.

                                  Serial.print(val);   // val 변수에 정상적으로 저장이 됐는지 확인하기 위해 출력해봅니다. 

}

 

 

 

           1. 아두이노와 usb연결

           2. 연결된 usb를 컴퓨터와 연결

           3. 아두이노 ide(스케치)에서 해당 코드를 작성

           4. 시리얼 모니터를 열어 정보를 입력 /  확인

 

                                   

 

정상적으로 잘 되는지 확인해 볼까요??           

해당영상에서는 문자가 우측으로 출력되기때문에 보기가 상당히 힘들겠죠? 그럴땐 Serial.print() 에서 ln을 추가로 붙여 

수정해주면 줄바꿈으로 통해 깔끔하게 정보를 확인할 수 있습니다. 

 

Serial.print()  >>  Serial.println()