부품설명

자주 사용하는 부품들의 사용법에 대하여 알아봅니다.

LED 여러 개 연결하기

2014-07-25 05:36:29

개요

 

이번에는 LED 여러 개를 연결해 보겠습니다. 
나중에 LED를 한 개 사용하는 것보다 여러개를 연결하는 경우가 더 많을 것입니다.



 LED를 여러 연결한다면 터치센서와 함께 사용하여 터치가 되는 부분만 LED가 켜질 수 있게 할 수도 있습니다.


 또는 글자를 만들어 색깔이 계속 바뀌는 조명, 간판을 만들 수도 있습니다.




 

심지어 옷까지도 만들 수 있을 것입니다.

앞에서 배운 LED 한 개 켜기를 여러 번 반복하는 것일 뿐 결코 어려운 것이 아닌 것을 경험하실 것입니다.

반복한다고 해서 스케치도 길어지는 것은 아닙니다.
스케치를 효율적으로 작성하기 위해서 FOR 문과 배열의 사용할 것입니다. 
물론 아래 설명에서도 FOR문과 배열에 대한 내용이 있지만
먼저 링크를 통해 한 번 읽어보시고 오면 이해가 더욱 쉬울 것입니다.
앞으로 여러 개의 센서들을 연결한 스케치를 작성할 때 응용해보세요.


 


 

 

 

시작 전 개념 이해하기

 

아래 링크를 통하여 본 학습에 필요한 사전 지식을 얻을 수 있습니다.

 

 

 

부품목록

 

본 학습에는 총 5종류의 부품이 필요합니다.


 

NO 부품명 수량
1 아두이노 우노 R3 1
2 5mm LED 8
3 330Ω 저항 8
4 브레드보드 1
5 점퍼 케이블 9

 

부품명 330Ω 저항 Breadboard Arduino UNO Jumper cable 5mm LED
파트 X8 X1 X1 X9 X8
 

 

 

 

하드웨어 making

 

조감도


 

 

회로도

 

 

브레드보드 레이아웃

 

 

 

소프트웨어 Coding

 

/*
 제목		: LED 여러개 연결하기
 내용		: 여러 개의 LED를 제어해 봅시다.
 */

// 배열을 사용하여 사용하는 핀을 한번에 선언합니다.
// 특정 핀 번호를 대신해서 배열명[특정 방 번호] 사용합니다.
// ledPins[0] 은 2번 핀을 의미합니다.
int ledPins[] = {2, 3, 4, 5, 6, 7, 8, 9};

// 실행시 가장 먼저 호출되는 함수이며, 최초 1회만 실행됩니다.
void setup() {
	// 배열의 방 번호를 저장할 변수를 선언합니다. 
	int index; 
	// for 반복문과 배열을 사용하여 2번부터 9번까지의 핀을 출력 핀으로 설정합니다.
	for(index = 0 ; index <= 7 ; index++){
    	pinMode(ledPins[index],OUTPUT);
    }	
}

// setup() 함수가 호출된 이후, loop() 함수가 호출되며,
// 블록 안의 코드를 무한히 반복 실행합니다.
void loop() {
	// 반복문을 사용하지 않고, LED를 하나씩 키는 함수입니다. 
	oneAfterAnotherNoLoop();		
	// 반복문을 사용하여, LED를 하나씩 키는 함수입니다.
	oneAfterAnotherLoop();
}

// oneAfterAnotherNoLoop : 반복문을 사용하지 않고 하나씩 켜기
// 1. 하나씩 커짐
// 2. 0.1초 씩 일시정지
// 3. 거꾸로 하나씩 꺼짐
void oneAfterAnotherNoLoop() {
	// LED를 하나씩 모두 ON시킵니다. (순서 2번 핀 -> 9번 핀)
	// 2번 핀과 연결된 LED를 ON 시킵니다.
	digitalWrite(ledPins[0], HIGH);  
	//0.1초동안 대기합니다.
	delay(100);                      
	// 3번 핀과 연결된 LED를 ON 시킵니다.
	digitalWrite(ledPins[1], HIGH);  //3번 핀과 연결된 LED ON
	//0.1초동안 대기합니다.
	delay(100);                
	// 4번 핀과 연결된 LED를 ON 시킵니다.
	digitalWrite(ledPins[2], HIGH);  //4번 핀과 연결된 LED ON
	//0.1초동안 대기합니다.
	delay(100);                
	// 5번 핀과 연결된 LED를 ON 시킵니다.
	digitalWrite(ledPins[3], HIGH);  //5번 핀과 연결된 LED ON
	//0.1초동안 대기합니다.
	delay(100);                
	// 6번 핀과 연결된 LED를 ON 시킵니다.
	digitalWrite(ledPins[4], HIGH);  //6번 핀과 연결된 LED ON
	//0.1초동안 대기합니다.
	delay(100);                
	// 7번 핀과 연결된 LED를 ON 시킵니다.
	digitalWrite(ledPins[5], HIGH);  //7번 핀과 연결된 LED ON
	//0.1초동안 대기합니다.
	delay(100);                
	// 8번 핀과 연결된 LED를 ON 시킵니다.
	digitalWrite(ledPins[6], HIGH);  //8번 핀과 연결된 LED ON
	//0.1초동안 대기합니다.
	delay(100); 
	// 9번 핀과 연결된 LED를 ON 시킵니다.
	digitalWrite(ledPins[7], HIGH);  //9번 핀과 연결된 LED ON
	//0.1초동안 대기합니다.
	delay(100); 
 
 	// LED를 하나씩 모두 OFF시킵니다. (순서 9번 핀 -> 2번 핀)
 	// 9번 핀과 연결된 LED를 OFF 시킵니다.
 	digitalWrite(ledPins[7], LOW);   
 	//0.1초동안 대기합니다.
 	delay(100);                
 	// 8번 핀과 연결된 LED를 OFF 시킵니다.
 	digitalWrite(ledPins[6], LOW);  
 	//0.1초동안 대기합니다.
 	delay(100);                
 	// 7번 핀과 연결된 LED를 OFF 시킵니다.
 	digitalWrite(ledPins[5], LOW);   
 	//0.1초동안 대기합니다.
 	delay(100);           
 	// 6번 핀과 연결된 LED를 OFF 시킵니다.
 	digitalWrite(ledPins[4], LOW);   
 	//0.1초동안 대기합니다.
 	delay(100);                
 	// 5번 핀과 연결된 LED를 OFF 시킵니다.
 	digitalWrite(ledPins[3], LOW);   
 	//0.1초동안 대기합니다.
 	delay(100);                
 	// 4번 핀과 연결된 LED를 OFF 시킵니다.
 	digitalWrite(ledPins[2], LOW);   
 	//0.1초동안 대기합니다.
 	delay(100);                
 	// 3번 핀과 연결된 LED를 OFF 시킵니다.
 	digitalWrite(ledPins[1], LOW);   
 	//0.1초동안 대기합니다.
 	delay(100);                
 	// 2번 핀과 연결된 LED를 OFF 시킵니다.
 	digitalWrite(ledPins[0], LOW);   
 	//0.1초동안 대기합니다.
 	delay(100);                 
}

// oneAfterAnotherLoop() : 반복문을 사용하여 하나씩 켜기
void oneAfterAnotherLoop() {
	// 배열의 방 번호를 저장할 변수를 선언합니다.
	int index;            

    //배열의 방 번호를 0부터 하나씩 증가하면서 for문 안의 내용을 반복합니다.
	for(index = 0 ; index <= 7 ; index++){
		//index = 0이면 2번 핀과 연결된 LED를 ON 시킵니다.
		digitalWrite(ledPins[index], HIGH); 
		//0.1초동안 대기합니다.
 		delay(100);                
    }                                  

    //배열의 방 번호를 7부터 하나씩 감소하면서 for문 안의 내용을 반복합니다.
	for(index = 7; index >= 0; index--){
		//index = 7이면 9번 핀과 연결된 LED를 OFF 시킵니다.
		digitalWrite(ledPins[index], LOW);  
		//0.1초동안 대기합니다.
		delay(1000);
	}               
}

 

 

 

소프트웨어 & 하드웨어 설명

 

1. 스케치 설명

 

// 배열을 사용하여 사용하는 핀을 한번에 선언합니다.
// 특정 핀 번호를 대신해서 배열명[특정 방 번호] 사용합니다.
// ledPins[0] 은 2번 핀을 의미합니다.
int ledPins[] = {2, 3, 4, 5, 6, 7, 8, 9};

이번 스케치에서는 배열을 사용합니다. 
배열은 동일한 크기를 가진 방에 같은 타입의 값을 저장하는 것입니다.

 

2 3 4 5 6 7 8 9


위의 스케치 처럼 각 핀 번호를 저장할 변수를 하나씩 다 선언 할 필요없이 배열을 사용하여 한번에 변수를 선언 할 수 있습니다.
배열표현은 배열명 뒤에 [ ]를 붙여야 합니다.

각 방에 있는 값을 사용하기 위해서는 방 번호를 사용하면 됩니다.
방 번호는 0부터 시작합니다.
ledPins[0]은 2를 의미 합니다.

앞으로 이처럼 동일한 부품을 여러개 연결 할 때 배열을 사용하면 좋습니다.

 

// oneAfterAnotherLoop() : 반복문을 사용하여 하나씩 켜기
void oneAfterAnotherLoop() {
  // 배열의 방 번호를 저장할 변수를 선언합니다.
  int index;            

    //배열의 방 번호를 0부터 하나씩 증가하면서 for문 안의 내용을 반복합니다.
  for(index = 0 ; index <= 7 ; index++){
    //index = 0이면 2번 핀과 연결된 LED를 ON 시킵니다.
    digitalWrite(ledPins[index], HIGH); 
    //0.1초동안 대기합니다.
    delay(100);                
    }                                  

    //배열의 방 번호를 7부터 하나씩 감소하면서 for문 안의 내용을 반복합니다.
  for(index = 7; index >= 0; index--){
    //index = 7이면 9번 핀과 연결된 LED를 OFF 시킵니다.
    digitalWrite(ledPins[index], LOW);  
    //0.1초동안 대기합니다.
    delay(1000);
  }               
}

배열은 반복문과 함께 사용하면 매우 효율적입니다.
위의 예 처럼 digitalWrite 를 여러번 쓰지 않고 짧게 스케치를 작성하지 않을 수 있습니다.

모든 LED를 켜기 위해서

  1.  방번호를 저장할 변수(index)를 for 문 전에 미리 선언합니다.
  2.  for 문에서 index를 0이라고 초기화 합니다.
  3.  for 안의 내용이 index가 하나씩 올라가면서 반복이 됩니다.

index 가 0이면 digitalWrite(ledPins[0], HIGH);, 즉 2번 핀과 연결된 LED가 켜집니다.

 

kocoafabeditor

항상 진취적이고, 새로운 것을 추구하는 코코아팹 에디터입니다!

LED,배열

hihyo 2014-08-01 16:07:40

멋지네요

jy 2014-08-01 16:50:58

감사합니다

주철응 2016-02-24 11:22:30

설명이 자세해서 너무 감사합니다.

조성원 2016-09-29 06:00:59

감사합니당