★ 이번엔 Serial 통신 세번째 시간으로, Serial 통신으로 데이터를 받는 방법을 알아보겠습니다.
★★ 준비 ★★
◎ 아두이노 보드 ( 본 예제는 아두이노 시리즈 중 UNO 보드를 사용함 )
1. 기초학습 7. 에서 사용한 코드를 다음과 같이 수정합니다
◎ void serialEvent() 함수가 추가되었습니다.
○ serialEvent() 함수도 loop() 함수와 마찬가지로 계속 반복된다고 생각하시면됩니다.
( 좀 더 깊은 학습은 구글링 "serialEvent()"를 검색 )
◎ serialEvent()함수는 데이터를 수신받기 위한 함수입니다.
○ 본 학습에서는 PC에서 전송된 데이터를 아두이노에서 수신하기 위해 serialEvent() 함수를 이용하여 수신합니다.
※ 쉽게 쉽게! 아두이노에서 수신받기 위해서는 serialEvent() 함수가 필요하다! 정도만 생각합시다.( 깊게 알고싶은 경우 구글링을 통해 추가 학습하시길 바랍니다 )
2-1. 코드를 다음과 같이 수정합니다
◎ Serial.available() 함수는 아두이노가 수신한 데이터를 담는 그릇이라고 생각하시면 됩니다.
2-2. 시리얼 모니터를 실행하여 다음과 같이 입력해봅니다
◎ 하단 "line ending 없음"을 선택합니다
◎ 입력창에 'a'를 입력하고 '전송'버튼을 클릭합니다
◎ 출력창에 위와 같이 출력이되면 정상입니다.
○ 1이 출력되는 이유는 'a' 한글자만 입력했기 때문이고, 'abc'를 입력하면 어떻게 될까요?
※ 1이 계속 출력되는 이유는, Serial 수신 바구니에 입력한 'a' 데이터 한개가 담겨있기 때문이며, 바구니에서 데이터를 꺼내거나 아두이노를 리셋할 경우 바구니가 비워집니다.
3. 다음과 같이 코드를 수정하여 데이터를 꺼내봅니다
◎ Serial.read() 는 아두이노 Serial 수신 버퍼에 들어있는 데이터를 꺼내오는 것입니다.
◎ 첫번째 줄 1 은 Serial.print(String(Serial.abailable()) + '\n')을 통해 출력된 시리얼 버퍼에 저장된 데이터 수.
◎ 97은 'a'의 아스키코드 10진수 값입니다. ( 코아&리아 Tip 카테고리 아스키코드표 참고 )
※ Serial.read() 함수는 byte 형태로 값을 반환합니다. 좀더 깊은 공부를 하고싶을 경우, 구글링 'byte'를 검색.
◎ 위 이미지처럼 문자로 출력하고 싶다면, (char)를 붙여주면, 문자로 출력이 가능합니다.
( 좀 더 깊게 알고 싶다면, "byte to char" 또는 "형변환"을 구글에서 검색해보시면 자세한 내용들이 있습니다 )
※ 저희는 Serial.read()를 (char)형으로 계속 수신받을 것이니, 아두이노에서 데이터를 수신받을 때는 Serial.available()와 (char)Serial.read()를 사용한다. 라고 생각하고 넘어갑니다.
4. 기초학습에서 사용될 serialEvent() 기본 코드는 아래와 같습니다
◎ serialEvent()에서 작성한 코드를 쉽게 설명하자면, "만약(Serial 버퍼에 데이터 갯수가 0보다 크다면) Serial 버퍼에서 데이터를 꺼내겠다. 근데 (char) 문자형태로 꺼내와서 char 형(문자형) 변수 c에 담아두겠다" 입니다.
※ 좀 더 깊게 알고 싶다면 구글링 "char 형" 검색
5. 수신 받은 데이터를 시리얼모니터에 출력하기
◎ Serial.print(String(c) + '\n'); 코드를 추가합니다.
○ 변수 c 에 들어있는 문자를 출력하라는 뜻입니다. '\n'은 이전 기초학습을 참고하세요.
◎ 시리얼모니터 입력칸(붉은 동그라미)에 abc를 한 문자씩 입력하여 전송버튼을 눌러봅니다.
☆ abc를 한번에 넣고 전송 버튼을 눌러봅니다. 그리고 왜 출력이 입력한것과 동일하게 나오지 않는지는 다음 시간에 추가됩니다.
※ 이번 학습은 여기서 마치도록 합니다.
★ Serial.available() 는 아두이노가 수신받은 데이터를 보관하는 버퍼역할을 합니다.
★ Serial.read() 는 아두이노의 수신 버퍼에서 데이터를 1개 가져옵니다.
★★ 지금까지 배운 내용만 사용해도 "아두이노를 이용한 채팅" 시스템을 만들 수 있습니다.
( 궁금하시면 계속 따라오시면 됩니다 )
'아두이노 기초 학습' 카테고리의 다른 글
10. 아두이노 시리얼통신을 이용한 LED ON/OFF ( 1 ) (2) | 2022.12.17 |
---|---|
9. 아두이노 시리얼통신 네번째( 채팅 ) (0) | 2022.12.15 |
7. 아두이노 1시간 학습 후 사물인터넷(IOT) 1분 적용 두번째시간 (0) | 2022.12.12 |
6. 아두이노 1시간 학습 후 사물인터넷(IOT) 1분 적용 (0) | 2022.12.09 |
5. 아두이노 시리얼 통신 두번째 시간 (0) | 2022.12.09 |
댓글