목표
적외선(IR) 리모컨의 버튼을 누르면 어떤 버튼을 눌렀는지 대시보드 텍스트 위젯에 표시합니다.
본 예제에서는 숫자버튼 1,2,3 만 사용합니다.
하드웨어
부품
부품 | 갯수 |
---|---|
IR 리시버 | 1 |
IR 리모컨 | 1 |
연결
아래의 핀을 가로 방향으로 서로 연결해줍니다.
IR 리시버 | GPIO |
---|---|
VCC (VIN) ¹ | 3.3V |
GND (-) | GND |
OUT(S) ² | 23 |
I/O장치
IR 리시버를 I/O장치에 추가합니다.
변수
리모컨에서 수신된 값 및 위젯에 표시할 버튼 번호를 저장할 변수를 추가합니다.
- “수신 값” (숫자)
- “버튼 번호” (숫자)
버튼의 값 찾기
리모컨의 버튼을 눌렀을때 IR 리시버에 수신되는 값은 리모컨의 제조사 및 모델에 따라 다릅니다. 그러므로 로직을 만들기 전에 숫자버튼 1,2,3 을 눌렀을때 수신되는 값을 미리 기록해 둡니다.
대시보드를 생성합니다.
읽기 위젯을 추가합니다.
- 변수: “수신 값”
- 타입: 텍스트
RUN모드로 변경하고 리모컨의 숫자버튼 1,2,3을 눌러 위젯에 표시되는 값을 따로 기록해 둡니다.
다시 STOP모드로 변경합니다.
로직
IR 리시버는 일단 시작되면 백그라운드에서 계속 작동하면서 리모컨으로 부터 수신값이 있을 때마다 “수신 값” 변수에 저장합니다. I/O 장치의 초기명령에서 이미 IR 리시버가 시작되었으므로 로직에서는 “수신 값”이라는 변수의 값이 특정 값에 해당할때 “버튼 번호” 변수의 값을 변경합니다.
이를 알고리즘 블록으로 나타내면 아래와 같습니다.
[로직]
로직을 추가합니다. 실행주기는 기본값을 사용합니다.
[제어] 버튼 1을 눌렀을 때
제어를 추가합니다. 모든 설정은 기본값을 사용합니다.
[조건] 수신값이 버튼 1에 해당할 때
1번 버튼을 눌렀을때 IR리시버에 수신되는 값을 미리 기록해두었으므로 “수신 값” 변수의 값을 이 값과 비교하는 조건을 추가합니다.
- 타입: 비교
- 변수: “수신 값”
- 연산자: = (같다)
- 값: 1번 버튼을 눌렀을 때의 값
[동작] “버튼번호”의 값을 1로 쓰기
“버튼 번호” 변수의 값을 1로 쓰는 동작을 추가합니다.
- 타입: 쓰기
- 변수: “버튼 번호” 변수 선택
- 값: 1
[제어] 버튼 2를 눌렀을 때
위와 동일한 과정으로 2번 버튼을 눌렀을 때의 제어를 추가합니다.
[제어] 버튼 3을 눌렀을 때
위와 동일한 과정으로 3번 버튼을 눌렀을 때의 제어를 추가합니다.
대시보드
대시보드를 추가합니다.
읽기 위젯을 추가합니다.
- 변수: “버튼 번호”
- 타입: 텍스트
실행
버튼을 눌러서 RUN모드로 진입합니다.