목표
푸시버튼을 누를때마다 LED가 켜지거나 꺼집니다. LED의 초기상태는 꺼진상태입니다.
하드웨어
부품
부품 | 갯수 |
---|---|
적색 LED | 1 |
220Ω 저항 ¹ | 1 |
푸시버튼 | 1 |
연결
아래의 핀을 가로 방향으로 서로 연결합니다.
부품1 | 부품2 | GPIO |
---|---|---|
LED + ¹ | | 23 |
LED – | 220Ω 저항 | GND |
푸시버튼 핀1 ² | | 3.3V |
푸시버튼 핀2 ¹ | | 14 |
I/O장치
LED와 푸시버튼을 I/O장치에 등록합니다.
변수
푸시버튼의 누름 여부와 LED의 현재 상태값을 저장할 변수를 추가합니다.
- “버튼 누름” (디지털)
- “LED 상태” (디지털)
로직
컨트롤러는 사용자가 언제 푸시버튼을 누를지 모르기 때문에 항상 푸시버튼의 값을 읽어야 합니다. 만약 사용자가 푸시버튼을 눌렀다면 현재 LED의 값을 읽어와서 반전한 후에 다시 LED에 해당 값을 써주면 푸시버튼을 누를 때 마다, LED가 켜짐과 꺼짐을 반복하게 됩니다.
이를 알고리즘 블록으로 나타내면 아래와 같습니다.
[로직]
로직을 추가합니다. 실행주기는 기본값을 사용합니다.
[제어] 푸시버튼의 값 읽어오기
컨트롤러는 사용자가 언제 푸시버튼을 누를지 알 수 없기 때문에 항상 푸시버튼이 연결된 GPIO핀의 값을 읽어와서 “버튼누름”이라는 변수에 해당 값을 저장합니다.
로직에 제어를 추가합니다. 모든 설정값은 기본값을 사용합니다.
[제어] 푸시버튼을 누르는 순간 LED를 반전하기
푸시 버튼을 누를때 마다 LED를 OFF->ON 또는 ON->OFF로 반전합니다. 즉, LED의 현재상태를 읽어와서 반전한 뒤, 다시 LED에 씁니다.
로직에 제어를 추가합니다. 모든 설정값은 기본값을 사용합니다.
[조건] 푸시버튼이 눌러지는 순간
앞에서, 푸시버튼이 눌러졌는지 여부를 “버튼 누름”이라는 변수에 저장해두었습니다. 그러므로 그 변수의 값이 false에서 true가 되는 순간이 푸시버튼을 누르는 순간입니다. 이를 검사하는 조건을 추가합니다.
- 타입: 비교
- 변수선택: “버튼 누름”
- 연산자: = (같다)
- 값: true
- 조건 옵션: 참인 순간
[동작] LED의 값을 읽어온다
LED가 연결된 GPIO의 값을 읽어서 “LED 상태” 변수에 저장하는 동작을 추가합니다.
- 타입: I/O장치
- 장치선택: LED
- 명령: READ_PIN
- 값: “LED 상태” 변수 선택
[동작] 읽어온 값을 반전한다
“LED 상태” 변수의 값을 반전합니다.
- 타입: 쓰기
- 변수선택: “LED 상태”
- 쓰기옵션: 반전
[동작] 반전된 값을 LED에 쓴다
“LED 상태” 변수의 값을 LED가 연결된 GPIO핀에 쓰는 동작을 추가합니다. true 또는 false와 같이 고정된 값이 아닌, 변수의 값을 읽어서 LED에 써야하며 블록코딩을 사용하면 쉽게 구현할 수 있습니다.
- 타입: I/O장치
- 장치: LED
- 명령: WRITE_PIN
- 값
- 블록모드로 전환합니다.
- [블록편집] 버튼을 클릭하면 블록편집기가 나타납니다.
- [빠른입력]에서 “디지털변수 읽기”을 선택하고 [연결] 블록에 연결합니다.
- 표시된 블록에서 [선택]을 눌러서 “LED상태”를 선택합니다.
- 블록편집기를 닫습니다.