목표
소리센서에 소리가 감지되면 LCD 디스플레이의 백라이트를 켜고 “HELLO”를 표시합니다. 3초 뒤에 LCD디스플레이의 표시 내용을 삭제하고 백라이트를 끕니다.
하드웨어
부품
부품 | 갯수 |
---|---|
소리센서 | 1 |
16×2 LCD 디스플레이 (PCF8574) | 1 |
연결
아래의 핀을 가로 방향으로 서로 연결합니다.
소리센서 | LCD 디스플레이 | GPIO |
---|---|---|
+ ¹ | | 3.3V |
G | | GND |
DO ² | | 24 |
| VCC | 5V |
| GND | GND |
| SDA ³ | 2 (I2C1 SDA) |
| SCL ³ | 3 (I2C1 SCL) |
³ 하드웨어 I2C 핀 (GPIO 2,3)에 연결합니다. 소프트웨어 (bit-bang) 인터페이스 사용시 임의의 핀을 사용할 수도 있습니다.
I/O장치
소리센서와 LCD디스플레이를 I/O장치에 추가합니다.
변수
소리가 감지되었는지 여부를 저장할 변수를 추가합니다.
- “소리 감지” (디지털)
로직
소리센서는 일정크기 이상의 소리가 감지되면 DO핀에서 true를 출력합니다. 소리가 감지되면 LCD 디스플레이의 백라이트를 켜고 좌측 상단에 “HELLO”를 3초간 표시한 뒤에, 다시 문구를 삭제하고 백라이트를 끕니다.
이를 알고리즘 블록으로 나타내면 아래와 같습니다.
[로직]
로직을 추가합니다. 실행주기는 기본값을 사용합니다.
[제어] 항상 소리센서의 출력을 읽는다
제어를 추가합니다. 모든 설정은 기본값을 사용합니다.
[조건] 항상
항상 만족하는 조건을 추가합니다.
- 타입: 항상유효
[동작] 소리센서의 출력을 읽는다
소리센서의 출력을 읽어서 “소리 감지” 변수에 해당 값을 저장하는 동작을 추가합니다.
- 타입: I/O장치
- 장치: 소리센서
- 명령: READ_PIN
- 값 : “소리 감지” 변수 선택
[제어] LCD에 문구를 표시하고 일정시간 이후 삭제하기
제어를 추가합니다. 모든 설정은 기본값을 사용합니다.
[조건] 소리가 감지되는 순간
앞에서, 소리의 감지여부를 “소리 감지”라는 변수에 저장해두었습니다. 그러므로 그 변수의 값이 false -> true 되는 순간이 소리가 감지되는 순간이며 이를 검사하는 조건을 추가합니다.
- 타입: 비교
- 변수선택: “소리 감지”
- 연산자: = (같다)
- 값: true
- 조건옵션: “참인 순간”
[동작] LCD의 백라이트를 켠다.
동작을 추가합니다.
- 타입: I/O장치
- 장치: LCD
- 명령: BACKLIGHT_ON
[동작] LCD의 커서를 왼쪽 상단에 위치한다
커서는 LCD에 텍스트를 표시할 위치를 의미합니다. LCD의 열 번호는 가장 왼쪽이 0이며 오른쪽으로 갈수록 증가합니다. 행 번호는 가장 위쪽이 0이며 아래로 갈수록 증가합니다.
커서를 LCD의 왼쪽 상단 (열:0, 행:0)에 위치하는 동작을 추가합니다.
- 타입: I/O장치
- 장치: LCD
- 명령: SET_CURSOR
- 값
- 열 (Column): 0
- 행 (Row): 0
[동작] “HELLO”를 LCD에 표시한다.
LCD에 텍스트를 표시하는 동작을 추가합니다.
- 타입: I/O장치
- 장치: LCD
- 명령: PRINT
- 값: “HELLO”
[동작] 3초 대기한다.
동작을 추가합니다.
- 타입: 시간지연
- 값: 0h 0m 3s 0ms
[동작] LCD의 표시내용을 삭제한다.
동작을 추가합니다.
- 타입: I/O장치
- 장치: LCD
- 명령: CLEAR
[동작] LCD의 백라이트를 끈다.
동작을 추가합니다.
- 타입: I/O장치
- 장치: LCD
- 명령: BACKLIGHT_OFF