오디오 쿠키는 작고 재미있는 오디오 툴들을 제작합니다

    EW4SM 목차
  1. LED Level Meter
  2. 기초 회로 실습
  3. Arduino
    1. 프로그래밍 기초
    2. 연산자와 IF문
    3. PAN Knob 구현
    4. FOR Loop, 레벨 표시
    5. Serial로 값 표시
    6. DO-WHILE 문법
    7. FUNCTION 사용
  4. Mini Powered Speaker
  5. Fader Box
    1. Passive Volume
    2. Transformer
    3. Digital UP/DOWN
    4. Digital Volume I
    5. Digital Volume II
    6. Fader ADC
    7. Balanced Output
    8. D.Volume & Balanced
    9. Flying Fader
  6. USB AudioBox (DAC)
    1. AudioBox
  7. MIDI Controller 만들기
    1. Hardware Setup
    2. MIDI Spec.
    3. MIDI Software Programming

Basic Sketch | 기본 문법과 IF문 실습

1. 준비물

  • Arduino Board 1개
  • 컴퓨터
  • USB 케이블
  • LED 8개
  • 220ohm 저항 8개
  • 브레드보드와 점퍼선

2. 미리보기

2.1 BreadBoard에 세팅하기

  • LED 방향에 주의해서 연결한다.
  • LED는 8개 모두 Anode(+)쪽이 모두 +와 연결된다.
  • LED의 Cathode(-)쪽이 220 저항과 연결된다.
  • 캐소드는 Cathode라고 쓰지만 외울때는 LED 기호와 비슷하게 K로 Kathode라고 외우면 LED 다리가 덜 헷갈립니다. -_-;
  • 220 저항의 다른 끝은 아두이노의 각 핀들과 연결한다.
  • LED가 연결되는 아두이노 핀은 6번~13번이다.

3. 샘플 프로그램으로 회로 확인하기

3.1 LED 켜기 확인

  • 아두이노에서 프로그램을 작성하는 것을 스케치라고 한다.
  • 13번 핀에 LED가 연결되어 있으니 File-Examples-1.Basic-Blink 스케치를 불러온다.
  • 컴파일-업로드 해서 13번 핀에 연결된 LED가 깜빡이는지 확인한다.
  • 정상적으로 깜빡인다면 제대로 세팅된 것이다.
  • 12번, 11번, 10번, 9번, 8번, 7번, 6번 LED도 하나씩 깜빡이도록 스케치를 바꿔본다.

4. 스케치 문법

지난번에 LED를 켜고 끄는 것으로 프로그래밍의 맛을 보았습니다. 하지만 뭐가 뭔지 설명도 없이 그냥 짐작으로 바꿔가며 만들어야 했지요. 이번에는 좀 더 자세히 알아봅시다.

4.1 setup과 loop

스케치는 크게 setup() 과 loop()로 이뤄져 있다.

					void setup() {
						
						// 여기에 셋업 내용이 들어간다.
						
					}
					
					void loop() {
						
						// 여기에 루프 내용이 들어간다.
						
					}
				

4.1.1 setup()

  • setup() 에서는 아두이노의 입출력 핀이 어떻게 세팅되어 있는지를 기록하는 곳이다.
  • 세팅 뿐만 아니라 다른 프로그램 내용이 들어가도 상관 없다.
  • 단지, setup()에 있는 내용은 전원이 들어가면 단 1번 실행되는 코드들이다.
  • setup 전체 내용은 { } 기호 사이에 들어간다.
  • void 는 setup()이 끝난 후 돌려주는 값이 없다는 뜻인데, 지금은 그냥 무조건 쓰는 정도로만 알고 있자.
  • { 기호가 시작되는 위치와 } 기호가 마무리 되는 위치를 보면 setup() 글자와 줄을 맞추고 있다.
  • 컴퓨터가 이해하는 것은 기호의 위치와 상관 없지만 다음에 프로그램 수정을 위해 다시 보려면 줄을 맞춰 놓는 것이 좋다.

4.1.2 loop()

  • 아두이노에 전원이 들어가서 setup() 과정을 끝내고 나면 loop()가 반복된다.
  • 전원이 꺼질 때까지 loop()의 내용이 빠르게 반복된다.
  • setup()은 시작할 때 한번 실행되는 내용이고, loop()는 꺼질때까지 무한반복되는 내용이다.

4.2 = 은 새로운 개념으로

4.2.1 LED 하나 켜보기

변수를 만들고 값을 넣어보자. 8개 LED 중에서 제일 아래쪽에 있는 6번 핀에 연결된 LED를 켜보자.

	1:		void setup() {
	2:			pinMode(6, OUTPUT);
	3:		}
	4:		
	5:		void loop() {
	6:			digitalWrite(6, LOW);
	7:		}
						
  • 앞에 있는 번호(1:)는 줄 표시로, 프로그램 내용이 아니다.
  • 이 코드를 실행하면(Compile/Upload) 6번 LED가 켜진다.
  • 7번~13번 LED 상태를 지정하지 않았기 때문에 모두 다 켜져 있을 수도 있다.
  • 모두가 켜진 경우라면 6번 줄 내용을 digitalWrite(6, HIGH); 로 바꿔서 6번 LED만 끈다.
  • 우리가 세팅한 회로는 LED가 ActiveLow 구성이기 때문에 아두이노의 핀이 Low가 될 때 LED가 켜진다.
  • 2번 줄에서 pinMode()라는 함수를 사용했다.
  • pinMode()함수는 아두이노의 핀을 어떻게 사용할 것인지를 설정하는 함수다.
  • pinMode()안에 2개의 정보를 넣어주면 아두이노가 인식한다.
  • 앞에는 핀번호를, 뒤에는 타입을 정한다. 출력은 OUTPUT, 입력은 INPUT 이다.
  • 6번 핀이 LED 출력을 위해 사용되고 있으니까 OUTPUT을 썼다.
  • 함수는 실제로 어떻게 처리하는지를 보여주지는 않지만, 원하는 값을 넣어주면 정해진 기능을 수행한다.
  • 커피 자판기도 하나의 함수라고 볼 수 있다. 동전을 넣으면, 내부에서 어떻게 처리하는지 몰라도 커피를 준다. 사용자는 돈을 넣고 커피를 받는다. 내부에서 어떻게 처리하는지는 상관 없다. 함수도 마찬가지.
  • loop()에 쓰인 함수 digitalWrite()도 비슷하다.
  • 실제로 아두이노가 어떻게 처리하느지 모르지만 digitalWrite 함수를 사용하면 해당 핀에 디지털 값이 출력된다. 디지털 값이란 HIGH 또는 LOW 를 말한다. 그 사이의 값은 디지털 출력이 아니다.
  • 6번 핀을 LOW 상태로 만든다.
  • 한 문장이 끝날 때마다 ; 기호를 반드시 쓴다.
  • 문장이 마치는 기호 ; 를 빼먹어서 생기는 에러가 많다.
  • 기호 ; 를 빼먹거나, : 라고 잘 못 쓰거나.

4.2.2 LED 하나 깜빡이기

샘플에서 많이 봤던 코드지만 다시 한번 살펴보자.

	1:		void setup() {
	2:			pinMode(6, OUTPUT);
	3:		}
	4:
	5:		void loop() {
	6:			digitalWrite(6, LOW);
	7:			delay(200);
	8:			digitalWrite(6, HIGH);
	9:			delay(200);
	10:		}
						
  • 바뀐 문장은 7번~9번이다.
  • 이번에는 delay() 함수가 쓰였다.
  • delay() 함수는 ()안에 정보가 하나만 들어간다.
  • () 안에 어떤 숫자값을 넣으면 그것을 1/1000초 단위로 생각해 그 시간 동안 아무일도 하지 않는다.
  • delay(200);은 200/1000초, 2/10초 0.2초 정도 되는 시간이다.

4.2.3 변수 사용하기

지난번에 #define 과 같은 방법으로 변수를 사용해 보자.

	1:		int		LED =  6;
	2:
	3:		void setup() {
	4:			pinMode(LED, OUTPUT);
	5:		}
	6:
	7:		void loop() {
	8:			digitalWrite(LED, LOW);
	9:			delay(200);
	10:			digitalWrite(LED, HIGH);
	11:			delay(200);
	12:		}
					
  • 바뀐 부분이 많지 않다. 1번줄이 추가되고 4번, 8번, 10번 줄이 수정되었다.
  • 1번줄의 int LED=6; 은 숫자를 넣을 수 있는 자리를 만들고 그 자리의 이름을 LED 라고 지었다라는 뜻이다.
  • '숫자를 넣을 수 있는 자리'라는 말이 어려울 수도 있겠지만 앞으로는 이것을 그냥 변수라고 부른다.
  • 변수 중에서도 숫자만 넣을 수 있는 변수라서 정수형 변수라고 부르고, 표시는 int 라고 한다.
  • int 타입의 변수를 만드는데, 이름을 LED라고 짓고, 그 안에 값 6을 넣는다. 라는게 1번 줄의 내용이다.
  • 실행하면 아까와 마찬가지로 6번핀에 연결된 LED가 깜빡인다.
  • 6번 대신 11번을 넣어보자
  • 기호 = 은 오른쪽에 있는 내용을 왼쪽에 있는 변수에 넣는다 라는 뜻이다.
  • 수학에서 쓰는 “같다”라는 뜻과 다르다.

이번에는 연산을 해보자. 이번에는 LED 8개를 다 사용하니까 setup() 부터 달라진다.

	1:		int 	LED = 6;
	2:
	3:		void setup() {
	4:			pinMode(6, OUTPUT);
	5:			pinMode(7, OUTPUT);
	6:			pinMode(8, OUTPUT);
	7:			pinMode(9, OUTPUT);
	8:			pinMode(10, OUTPUT);
	9:			pinMode(11, OUTPUT);
	10:			pinMode(12, OUTPUT);
	11:			pinMode(13, OUTPUT);
	12:		}
	13:
	14:		void loop() {
	15:			digitalWrite(LED, LOW);
	16:			delay(200);
	17:			digitalWrite(LED, HIGH);
	18:			delay(200);
	19:			LED = LED + 1;
	20:		}
					
  • 실행하면 어떻게 되는가?
  • LED가 하나씩 켜지면서 이동하는 것을 보았는가?
  • 한~~~~~~참 기다리면 또 하나씩 이동하는 것을 볼 수 있다.
  • 기다리기 지겨우니, 또 문장을 읽어 보자. 읽다보면 어느새 LED가 또 지나가는 것을 볼 수 있다.
  • 아까는 loop에서 11번까지 진행하고 또 loop의 처음으로 돌아갔다.
  • 이번에는 12번 줄에서 LED 변수의 값을 1 증가시켰다.
  • 아까도 나왔지만 = 기호는 수학과 다르게 쓰인다.
  • LED에 있는 값 + 1해서 LED 자리(변수)에 넣는다는 의미다.
  • LED는 숫자가 들어 있는 변수이기 때문에 +-*/ 같은 사칙연산을 할 수 있다. 게다가 아주 정확하다.
  • loop가 한번 돌 때마다 LED 값이 1씩 커져서 LED 번호를 바꾸니 실제 켜지는 LED도 바뀐다.
  • LED 값이 13을 넘고나면 LED가 알려주는 번호의 핀이 없으므로 아두이노의 동작을 느낄 수 없다.
  • 이상한 동작을 할 수 있다.
  • 그렇다면.. LED 값이 13보다 커지면 다시 6으로 만들어 주면 되지 않나?

4.3 if 조건문

이제 if 조건문을 만든다. 방금 발생했던 의문 변수 LED의 값이 13보다 커지면 다시 6으로 만들고 싶은거다.

  • LED 값을 6으로 만드는 것은 LED = 6;하면 끝이다.
  • LED가 13보다 큰지 안큰지 알아 보는게 if 라는 함수다.
	18:			delay(200);
	19:			
	20:			if(LED > 13) {
	21:				LED = 6;
	22:			} else {
	23:				LED = LED + 1;
	24:			}
	25:		}
				
  • if() 함수는 괄호안에 조건이 들어간다. 그래서 참이면 { } 안의 내용이 실행되고 거짓이면 else 다음에 나오는 { } 안의 내용이 실행된다.
  • { } 안에는 여러 문장이 들어갈 수 있고, 각 문장은 ; 기호로 끝이 나야한다.
  • 조건식의 기호는 다음과 같다.
  • > : 왼쪽이 오른쪽보다 큰가?
  • >= : 왼쪽이 오른쪽보다 크거나 같은가?
  • < : 왼쪽이 오른쪽 보다 작은가?
  • <= : 왼쪽이 오른쪽보다 작거나 같은가?
  • == : 왼쪽이 오른쪽과 같은가?
  • != : 왼쪽이 오른쪽과 같지 않은가? (다른가?)

5. 과제

이번에는 지금까지 공부한 것을 가지고 몇가지 응용을 해보자.

  • 5.1 LED가 순차적으로 켜지는 것의 속도를 바꾸어 보자.
  • 5.2 LED가 순차적으로 켜지는 것의 방향을 바꾸어 보자.
최종수정 2014.02.18 16:35:26