본문 바로가기
아두이노 기초 학습

13. 아두이노 시리얼통신 LED 밝기조절( PWM ) 2

by 에이치엘 2022. 12. 22.

※ 기초 학습 12에서 사용된 아두이노 소스코드를 다음과 같이 수정합니다

 

◎ 18번 줄 : protocol.indexOf(); 함수란 , String 형(문자열)  변수의 문자 중, 특정 문자의 위치를 가져올 수 있습니다. 즉, protocol 변수에 담겨져 있는 문자열 중, 쌈정( : )의 위치 값을 int(정수형) index 변수에 담겠다는 뜻입니다.

※ 만약 indexOf()함수에서 인자로 넘겨준 쌍점( : )이 문자열에 없을 경우, indexOf()함수는 -1 값을 반환합니다.

 

◎ 19번 줄 : 만약 protocol 변수에 담긴 문자열에서 쌍점( : )이 없을 경우, -1 값을 반환하기에, protocol 문자열에 쌍점( : )이 있을 경우에 조건문( if() )을 실행.

 

◎ 20번 줄 : protocol.substring() 함수는 protocol 문자열을 조건에 맞춰서 가져올 수 있습니다. 예를 들어 protocol 변수에 문자열 "PWM/100" 이란 문자열이 담겨있다고 가정하고, "PWM" 문자만을 가져오고 싶을 경우, 문자열의 0번째 위치부터 3번째 자리까지 문자열을 반환한다 라고 protocol.substring(0, 3); 같이 입력하면 됩니다. 만약 WM을 가져오고 싶은 경우 1번째 위치 부터 3번째 자리까지 문자열을 반환하다라고 입력( protocol.substring(1,3) )해야됩니다. 

protocol.substring(0, index); , index 값으로 인자를 넘겨준 이유는 18번 줄에서 쌍점( : )의 위치를 index 에 담겨있기 때문입니다. index 자릿수까지 반환하면 "PWM/"가 아니냐? 라는 의문을 가질 수 있지만, substring()의 두번째 인자는 자릿수이기에 1부터 시작합니다.

 

※ substring() 함수의 첫번째 인자는 문자열의 위치, 두번째 인자는 자릿수입니다. 쉽게 말해 "PWM" 문자열의 첫번째 P는 위치값은 0, 자릿수는 1입니다. ( 좀 더 깊게 공부하고 싶으시면 "아두이노 substring()"를 검색 )

 

◎ 21번 줄 : protocol.substring(0, 3) 반환 값이 "PWM"과 동일할 경우 실행되는 analogWrite() 함수 입니다. analogWrite()함수에 대해서는 기초학습 12에서 확인 부탁드리며, 이전 학습에서 부족했던 부분만 설명하자면 protocol.substring(index+1) <- 이 부분입니다. 20번 줄에서 substring()는 두개의 인자를 넘겨줘야했습니다. 근데 21번 줄에서는 하나의 인자만 넘겨주고 있습니다. substring()함수는 1개의 인자만 넘겨줄 경우, 반환을 시작할 문자열의 시작위치라고 인식하며, 해당 문자열의 끝까지 반환한다는 뜻입니다. "PWM" 문자열에서 "WM" 문자열을 반환받고자 한다면, substring(1, 3)을 인자로 넘겨줘도 되지만, substring(1)을 인자로 넘겨줘도 동일한 반환을 합니다. 이는 문자열의 끝은 알아서 계산해주겠다는 의도로 보여집니다.

 

※ "PWM"에서 "WM"을 출력하기 위해서 substring(1, 3)과 substring(1)은 동일한 결과이고, 본인이 이해하기 쉬운 쪽을 선택해서 사용하면 됩니다. 프로그래밍 언어에서는 동일한 결과를 가져오는 사용법들이 다양하기에, 자신에게 맞는 코드로 프로그래밍하는 것을 추천드립니다.( 차 후, 프로그래밍 실력이 늘어가면서 점점 고쳐집니다. ) 

 

1. 다음과 같이 IOT코아 앱이설치된 스마트폰에 "PWM" 프로토콜을 등록합니다.

( 프로토콜 등록화면 진입은 이전 기초학습을 참고해주세요 )

◎ IOT코아 앱에서 아두이노에게 데이터를 송신해야되기에, 송신 -> 데이터 "있음"을 선택합니다.

◎ "닉네임"을 지정 후 프로토콜은 "PWM"으로 입력, 추가 버튼을 선택하여 등록합니다.

※ 프로토콜이 "PWM"인 이유는 아두이노 코드 20번째 줄 "PWM"과 비교를 위해서 입니다.( 자세한 내용은 코아[IOT_KOA] 카테고리 중 "보드 프로토콜설정방법"을 참고해주세요 )

 

★★★ 이번 시간 숙지 내용 ★★★

1. 문자열변수.indexOf() : 문자열 변수에 담겨있는 문자열중, 특정 문자의 위치를 반환할 수 있다.

2. 문자열변수.substring() : 문자열 변수에 담겨있는 문자열 중, 특정 문자 또는 문자열을 구분해서 반환할 수 있다. 

 

☆ 다음은 동작 영상입니다.( 동작에 대해서 이해가 안될 경우, 이전 기초학습 또는 코아[IOT_KOA] 카테고리 참고 )

 

https://youtu.be/E2vdP86Geaw

 

댓글