Page 221 고등학교 프로그래밍 교과서
P. 221
(2) 프로그램 구현
01 int inp = 2; 입력 포트 핀 번호
02 int out[8] = {6, 7, 8, 9, 10, 11, 12, 13}; 번호 1
출력 포트 핀
03 int flag = 1; 플래그 변수
04 void setup( ) {
05 pinMode(inp, INPUT); 입력 포트 설정
06 for (int i = 0; i < 8; i++) 2
07 pinMode(out[i], OUTPUT); 출력 포트 설정
08 }
09
10 void loop( ) {
11 if (digitalRead(inp)) flag = -flag; 스위치를 누르면 flag를 반전 3 flag 변수의 반전
12 switch (flag) { flag= -flag, 이 문장은 flag의 초깃
13 case 1: flag가 1이면 오른쪽으로 이동 값이 1이므로 –1을 곱하면 –1이
14 for (int i = 0; i < 8; i++) { 되며, -1을 곱할 때마다 flag의 값
이 반전된다.
15 digitalWrite(out[i], HIGH); 포트에 HIGH 출력
16 delay(200);
17 digitalWrite(out[i], LOW); 포트에 LOW 출력 4
18 delay(50);
19 }
20 break;
21 case –1: flag가 -1이면 왼쪽으로 이동
22 for (int i = 7; i >= 0; i--) {
23 digitalWrite(out[i], HIGH); 디지털 입출력 포트
24 delay(200); 디지털 입출력은 0~13번 핀을 사용
25 digitalWrite(out[i], LOW); 5 할 수 있으나 0~1번 핀은 시리얼 통
26 delay(50); 신에 사용된다.
27 }
28 }
29 }
1 전역 변수 선언: 입출력 포트 번호를 저장하기 위한 변수와 flag 변수는 프로그
램 전체에서 사용되므로 전역 변수로 선언한다.
TIP 동작 테스트
2 입출력 포트 설정: 변수 inp에 저장된 포트는 입력 모드, 배열 변수 out[ ]에 저
프로그램 실행 후 스위치를 누르면
장된 포트는 출력 모드로 설정한다. 누를 때마다 즉시 응답하지 않는 경
우가 발생한다. 프로그램의 구조상
3 입력 포트 읽어오기: 입력 포트의 값을 읽고, 이 값이 참(스위치 ON)이면 flag의 CPU는 스위치의 값을 확인하는 일
보다 LED나 모터를 동작시키는 일
값을 반전시킨다.
에 더 많은 시간을 소비한다. 그러므
4 오른쪽 방향으로 이동: 출력 포트에 HIGH를 출력하면 LED가 켜지고 LOW를 로 이 순간에 스위치를 작동하면 스
위치의 입력을 인식하지 못할 수도
출력하면 LED는 꺼진다. delay( ) 함수에 의해 LED의 ON 상태는 0.2초 유지 있다.
하고, OFF 상태는 0.05초 유지하며 이 과정을 반복한다. for 문의 제어 변수
i가 0부터 7까지 1씩 증가하므로 이에 해당하는 배열 변수 out[ ] 값은 6~13으
로 하나씩 증가한다. 그러므로 LED의 점멸 방향은 오른쪽으로 이동한다.
2. 프로그래밍의 실제 Ⅰ 219
(책)2015프로그래밍-교과서3차심의본 본문.indb 219 2017-09-05 오후 4:16:56