본문 바로가기
대한상공회의소 스마트팩토리 교육/IoT 디바이스 개발

[IoT 디바이스 개발] 아두이노«독학-2» : 사용자 입력 기능 추가 / Serial.available 함수 / Serial.read 함수

by 나는영하 2022. 1. 25.

※ 주의사항 

본 블로그는 수업 내용을 바탕으로 제가 이해한 부분을 정리한 블로그입니다.
본 내용을 참고로만 보시고, 틀린 부분이 있다면 지적 부탁드립니다!

감사합니다😁

 

안녕하세요!!

오늘은 아래와 같은 내용을 확인해보겠습니다.

 

사용자 입력 기능 추가

Serial.available 함수

Serial.read 함수


사용자 입력 기능을 추가하기에 앞서 지난 시간에 배운 내용을 토대로 

2개의 LED와 1개의 RGB LED를 Blink 및 Fading 기능을 하도록 회로를 구성하고 코드를 짜보겠습니다.

그리고 나서 사용자 입력 기능을 추가해 보겠습니다.

지난내용은 아래를 참고해주세요!! 

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

 

2022.01.23 - [IoT 디바이스 개발] - [IoT 디바이스 개발] 아두이노«독학-1» : Blink 예제 / Fading 예제 / millis 함수

 

[IoT 디바이스 개발] 아두이노«독학-1» : Blink 예제 / Fading 예제 / millis 함수

※ 주의사항 ※ 본 블로그는 수업 내용을 바탕으로 제가 이해한 부분을 정리한 블로그입니다. 본 내용을 참고로만 보시고, 틀린 부분이 있다면 지적 부탁드립니다! 감사합니다😁 안녕하세요!!

920416.tistory.com

 


1. 2개의 LED와 1개의 RGB LED 회로 구성 & 코드

1-1. 회로

- 2개의 LED와 1개의 RGB LED가 구성되어있는 회로

- 1개의 RGB LED는 R, G, B 각각에 저항을 연결해 주어야 합니다. (단 GND는 공통)

- 2개의 LED는 13번과 12번 Pin으로 출력을 보내며 1개의 RGB LED는 11~9번으로 출력을 보냅니다.

 

1-2. 코드

blink 코드(좌) / fading 코드 (중) / RGB fading 코드(우)

- 지난 시간에 배운 millis 함수를 토대로 각각 동작하는 제어문을 완성지었습니다.

- 각각 사용자 정의 함수로 만들어서 메인 setup() 함수와 loop() 함수에서 호출하였습니다.

- RGB LED의 경우 3가지 LED가 한곳에 모여있어서 배열함수를 적용해서 코드를 만들었으며 for문을 사용해서 millis 함수를 통해 딜레이 타임을 각각 제어하였습니다.

- fading 주기 계산방법 : 255 / 5 * interval 설정 시간 = 255 / 5 * 30 = 1530ms =약 1.5초
즉, 약 1.5초 동안 12번 Pin에 연결되어있는 LED가 켜지고 약 1.5초간 꺼지는 동작을 수행합니다(3초주기)

 


2. 사용자 입력 기능 추가하기

사용자 입력에 따라 지금까지 추가한 기능(LED Blink 및 Fading)을 활성화 또는 비활성화 시키는 기능 추가 하기

 

2-1. 시리얼 탭 생성 및 시리얼 모니터 확인

- 사용자가 입력에 따라 LED를 제어할 수 있도록 관련 메뉴창을 만들어주고 '시리얼 모니터'를 통해 확인하여 줍니다.

- 시리얼 모니터는 아두이노 창에서 우측 상단에 있는 돋보기 표시버튼을 누르고 우측 하단에 통신속도를 맞추어 주면 됩니다.

 1) 사용함수

 Serial.begin(115200) : 시리얼 통신속도를 115200으로 초기화합니다.

 

2-2. 시리얼 읽어보기 (예제)

예제 코드(좌) / 시리얼 모니터(우)

 1) 사용함수

Serial.begin, Serial.available, Serial.read, Serial.print(println)

-Serial.begin : 시리얼 통신속도를 입력한 속도로 초기화합니다.

-Serial.available : 시리얼 입력 버퍼에 도착한 데이터수(크기)를 리턴합니다.

-Serial.read : 시리얼 입력 버퍼에 도착한 데이터를 한 바이트 읽어냅니다.

-Serial.print(println) : 데이터를 사람이 읽을 수 있는 ASCII 텍스트로 직렬 포트에 인쇄합니다.

 

 2) 동작수행

Line 1 : 시리얼 입력 버퍼에 도착한 데이터를 저장하는 변수를 설정해줍니다.

Line 4 : 시리얼 통신속도를 115200 Baud Rate로 초기화 합니다.

Line 8 : 시리얼 입력 버퍼에 도착한 데이터가 있으면 Line 9를 수행합니다.

Line 9 : 'serialByte' 변수에 시리얼 입력 버퍼에 도착한 데이터를 저장합니다.

Line 12 : 'serialByte'에 저장된 데이터를 십진수(DECimal)로 출력합니다.

 

- 시리얼 모니터 사진을 보면 사용자가 입력한 1~ 9까지의 아스키 숫자가 십진법으로 표기되어 나타납니다.(사용자가 키보드를 통해 입력한 숫자 1은 일반 10진수가 아닌 아스키코드의 1에 해당됩니다.)

 

2-3. 시리얼 적용하기 (가상 토글스위치로 동작 ON/OFF)

2-2에서 배운것을 토대로 본 코드에 적용시켜보겠습니다. 

먼저 메인함수에서 가상 토글스위치의 상태에 따라 LED가 멈추고 동작하는 조건문을 만들겠습니다.

 1) 동작조건

 Line 1~3 : 2개의 LED와 1개의 RGB LED를 제어하기 위한 변수 설정
 초기값은 1을 설정한다. (1은 활성화, 0은 비활성화를 의미)

 Line 14 ~ 19 : 1~3에서 설정한 변수의 값이 1이면 LED 제어 loop 함수를 실행하고
 변수의 값이 0 이면 LED 제어 loop 함수를 실행하지 않습니다.

 

- serial 탭에 serial_setup()과 serial_loop()를 선언하고 사용자가 입력하는 값(1~3)에 따라 LED를 활성화하고 비활성화하는 내용을 추가했습니다.
- Line 22~26 : 스위치문을 사용함으로서 사용자가 입력하는 값(userCmd)에 따라 arduino_superloop 탭의 첫줄에 선언한 변수에 1 또는 0('!' → NOT 연산자 사용)을 입력합니다.

※ blink_en = !blink_en 같이 변수 앞에 NOT연산자를 사용함으로써 가상의 토글스위치를 만들었습니다. 

 

이로써 1을 한번 입력하면 Blink 동작을 하는 LED가 멈추고, 1을 한번더 입력하면 다시 Blink 동작을 하는 LED가 동작하게 됩니다. 2와 3도 마찬가지로 각각 명령을 받고 수행하게 됩니다.(사용자 입력에 따라 제어 가능)


이와같이 Serial.Read()와 Serial.available() 함수와 switch 문을 활용해서 사용자 입력 기능을 추가해 보았습니다!! 

다음 «독학-3» 시간엔 "블루투스 통신 기능"을 추가해보겠습니다!! 😁

댓글