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

    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 | 문법: FOR-LOOP

1. 준비물

지난번 4회차 아날로그 입력 회로를 그대로 쓴다.

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

2. 미리보기

2.1 BreadBoard에 세팅하기

  • LED를 ActiveHigh 연결로 10개 연결한다.
  • LED는 10개 모두 Cathode(-)쪽이 모두 접지와 연결된다.
  • LED의 Anode(+)쪽이 220 저항과 연결된다.
  • 220 저항의 다른 끝은 아두이노의 각 핀들과 연결한다.
  • LED가 연결되는 아두이노 핀은 3번~12번이다.
  • 이 연결로는 아두이노의 출력핀이 HIGH일 때 LED가 켜진다.
  • 가변저항의 한쪽 끝에는 +5V, 다른 끝에는 접지와 연결한다.
  • 가변저항의 가운데 단자와 AnalogIN A0 단자를 연결한다.

3. 스케치 구성

아날로그 입력과 똑 같은 회로를 사용한다. 입력도 같다. 그러나 결과는 다르다. 이번에는 해당 번호까지 LED를 모두 켜는 것으로 한다. 볼륨 값에 따라 LED가 채워지는 형태다.

  • 아날로그 값을 읽어들인다. 읽은 값은 0~1023 사이의 값이다.
  • 읽어들인 값을 0~9 사이의 값으로 변환한다.
  • 결과 값에 해당하는 LED까지 모두 켜서 채운다.

4. 스케치 자세히 보기

	1:		void setup() {
	2:			for(int i=3; i < 13; i++) {
	3:				pinMode(i, OUTPUT);
	4:			}
	5:		}
	6:
	7:		void loop() {
	8:			int analogIN, levelVal, ledPin;
	9:			analogIN = analogRead(A0);
	10:			levelVal = map(analogIN, 0, 1023, 1, 10);
	11:			for(int i=0; i < levelVal; i++) {
	12:				ledPin = i+3;
	13:				digitalWrite(ledPin, HIGH);
	14:			}
	15:			delay(100);
	16:			for(int i=0; i < levelVal; i++) {
	17:				ledPin = i+3;
	18:				digitalWrite(ledPin, LOW);
	19:			}
	20:		}
			

4.1 FOR 루프 사용하기

for 루프는 "어디부터 어디까지 반복해서 실행한다" 라는 내용을 담고있다.

	2:			for(int i=3; i < 13; i++) {
	3:				pinMode(i, OUTPUT);
	4:			}
				
  • for() 다음에 나오는 { } 기호 안의 내용을 반복한다.
  • () 안에는 3가지 영역이 있다.
  • for(A; B; C) 로 구분했을 때, A는 초기값, B는 반복 조건, C는 변화값을 쓴다. 웬지 말이 어렵다. -_-;
  • A: int i=3; 초기값을 지정하기 위해 정수형 변수 i를 만들고, 초기값으로 3을 넣었다.
  • B: i < 13; 이 조건을 만족하는 동안 { } 안의 내용을 반복한다. i가 13보다 작으면 for 루프는 계속돈다. i 값이 13과 같거나 커지면 for 루프 다음 명렁어로 넘어간다.
  • C: i++ 루프가 한번 반복될 때마다 변화를 준다. 여기서는 i 값을 1씩 증가시킨다. i++은 i=i+1 이라는 것과 같다.
  • 이렇게 3줄만 써서 pinMode 명령어 10개를 실행한 것과 같은 효과를 낸다. 지난번 아날로그 입력처리의 2번줄~11번줄 까지의 내용을 이렇게 줄인 것이다.
	11:			for(int i=0; i < levelVal; i++) {
	12:				ledPin = i +3;
	13:				digitalWrite(ledPin, HIGH);
	14:			}
				
  • 이번에는 { } 안의 내용이 2줄이다. 2줄이 for 루프가 반복되면서 실행한다.
  • 변수 i를 아까도 초기화 했는데 또 초기화 한다.
  • 이것은 아까 사용한 i는 for()에서 초기화 했기 때문에 for 에서만 사용되고 없어졌기 때문이다.
  • for() { } 형식으로 사용하는 모든 것을 함수(펑션, Function)라고 하는데, 나중에 다시 다룰 내용이다.
  • 함수에 대해 우선 살표볼 내용은, 함수 내에서 만들어진 변수는 해당 함수에서만 사용할 수 있다는 것이다.
  • setup() { } 에서 만들어진 변수는 setup() 에서만, loop() { } 에서 만들어진 변수는 loop에서만, for() { } 에서 만들어진 변수는 for() 에서만 사용된다. 그래서 i 변수는 for 내에서만 사용되고 없어진다. 다시 사용하고자 할 때는 다시 또 정의해서 써야 한다는 얘기.
  • i < levelVal; 이것은 i가 levelVal 보다 작은 동안에 for 루프의 내용이 반복된다는 것이다.
  • i++ 은 아까와 마찬가지로 for 루프가 돌때마다 i가 1씩 증가한다는 뜻
  • i가 0부터 아날로그 볼륨으로 지정한 값보다 1 작을때 까지 반복된다. i가 1씩 증가하면서.
  • digitalWrite로 LED를 켜는 명령어가 있으므로, 0번 LED부터 지정된 LED까지 모두 켜진다.
  • 코드 16번줄~19번줄 까지는 해당 LED를 끄는 내용이다.

5. 과제

  • 5.1 LED 극성을 반대로 해서, ActiveLow 상태로 세팅해서 똑 같이 동작하도록 만들어보자.
  • 5.2 LED가 모두 켜진 상태에서, 볼륨을 돌리는 만큼 LED가 꺼지는 세팅으로 만들어 보자.
최종수정 2014.02.18 16:35:26