본문 바로가기
2022-2/마이크로프로세서

4장 - LED

by 철없는민물장어 2022. 10. 6.
728x90

LED (Light Emitting Diode)

기존의 형광등보다 효율이 좋다.

Anode(양극), Cathode(음극) 구분이 있으며 보통 다리가 긴 쪽이 양극임.

회로 연결 시 저항을 연결하지 않으면 과전류가 흘러 회로가 탈 수 있음

 

LED를 켜고/끄는 동작을 하기 위한 함수

digitalWrite(핀번호,HIGH/LOW) : 켜고 끄는 동작만 가능하며, 이 함수를 쓰기 위해선 pinMode(핀번호,OUTPUT) 세팅을 해줘야함

 

LED 밝기 조절(Dimming)

1. 전류 양을 조절, 가변저항을 사용하여 저항값을 낮춰주는 방법

2. PWM(Pulse Width Modulation) 방법: LED에서 HIGH - LOW를 매우 빠르게 스위칭 하면서 빛의 세기를 조절함.

(아두이노에서 PWM을 지원하는 PIN이 정해져 있음을 주의)

analogWrite(핀번호,0~255): 밝기 조절이 가능함. 255일 때 가장 밝음. 따로 세팅 필요없지만   

 

두 개의 LED를 번갈아가며 반짝이기

const int ledA = 3;
const int ledB = 5;

void setup()
{
	pinMode(ledA,OUTPUT);
    pinMode(ledB,OUTPUT);
}

void loop()
{
	digitalWrite(ledA,HIGH);
    digitalWrite(ledB,LOW);
    delay(100);
    digitalWrite(ledB,HIGH);
    digitalWrite(ledA,LOW);
    delay(100);
}

LED 밝기 조절하기(Dimming디밍)

const int ledA = 3;
const int ledB = 5;
int brightness = 0;
int increment = 1;

void setup(){
}

void loop(){
	analogWrite(ledA,brightness);
    analogWrite(ledB,255-brightness);
    
    brightness = brightness+increment;
    if(brightness>=255 || brightness<=0)
    	increment = -increment; //밝기 증감 방향 변경
   	delay(10);
    
}

analogWrite는 pinMode() 설정이 필요하지 않음

 


3색 LED 빛내기

const int RedLed = 3;
const int GreenLed = 5;
const int BlueLed = 6;

void setup()
{
	ledOutput(255,0,0);
    delay(1000);
    ledOutput(0,255,0);
    delay(1000);
    ledOutput(0,0,255);
    delay(1000);
}

void loop(){
	for(int i=0;i<255;i++){
    	ledOutput(255,i,0);
        delay(10);
        }
    for(int i=0;i<255;i++){
    	ledOutput(0,255,i);
        delay(10);
        }
    for(int i=0;i<255;i++){
    	ledOutput(i,0,255);
        delay(10);
        }
    for(int i=0;i<255;i++){
    	ledOutput(i,255,255);
        delay(10);
        }   
    for(int i=0;i<255;i++){
    	ledOutput(255,i,255);
        delay(10);
        }
    for(int i=0;i<255;i++){
    	ledOutput(255,255,i);
        delay(10);
        }
        
}

void ledOutput(int Red, int Green, int Blue){
	analogWrite(RedLed,Red);
    analogWrite(GreenLed,Green);
    analogWrite(BlueLed,Blue);
}

FND (Flexible Numeric Display)

(엘리베이터 숫자)

 

7-segment display라고도 한다. 7개의 LED를 사용하기 때문에.

//0~9까지 LED 표시를 위한 상수 설정 - gfedcba
const byte number[10]={
 B00111111,//0
 B00000110,//1
 B01011011,//2
 B01001111,//3
 B01100110,//4
 B01101101,//5
 B01111101,//6
 B00000111,//7
 B01111111,//8
 B01101111//9
 }
 
void setup(){
 //2~9번 핀을 abcdefg dot 순서로 사용할 것이고, 이 핀들을 출력모드로 초기화시킴
 for(int i=2;i<=9;i++){
	 pinMode(i,OUTPUT);}
 digitalWrite(9,LOW); //점은 표시 안하기
 }
 
 void loop(){
 	//k값을 0~9로 변화시킴
    for(int k=0;k<=9;k++){
    	fndDisplay(k)//k를 fnd에 출력하는 함수
        delay(1000);
       }
}

void fndDisplay(int k){
	boolean bitValue;
    for(int i=2;i<=9;++i){
    	digitalWrite(i,LOW);//일단 모두 소등
        }
    for(int i=0;i<=7;++i){
    	bitValue = bitRead(number[k],i); //bitRead는 i번째 bit를 읽는 함수
        digitalWrite(i+2,bitValue); 
        }
}

74595 IC

FND에는 8개의 LED가 있는데,

기존에는 8개의 핀을 연결해서 사용했다.

근데 8개의 핀을 이진수로 표현하면 3개의 핀으로도 정보를 받을 수 있다.

시간의 흐름에 따라 3개의 비트로 이루어진 정보를 전달.

8개를 모으게 되면 한번 FND를 켤 수 있는 신호가 됨

시간의 흐름에 따라 전달받은 값을 병렬적으로 한번에 넘겨주기 위해 shiftout()을 사용함

 

//0~9까지 LED 표시를 위한 상수 설정 - gfedcba
const byte number[10]={
 B00111111,//0
 B00000110,//1
 B01011011,//2
 B01001111,//3
 B01100110,//4
 B01101101,//5
 B01111101,//6
 B00000111,//7
 B01111111,//8
 B01101111//9
 }
 
 int ds = 2; //DS핀을 2번 핀에 연결
 int shcp = 3; //STCP핀을 3번 핀에 연결
 int stcp = 4; //shsp핀을 4번 핀에 연결
void setup(){
 //2~9번 핀을 abcdefg dot 순서로 사용할 것이고, 이 핀들을 출력모드로 초기화시킴
 for(int i=2;i<=9;i++){
	 pinMode(i,OUTPUT);}
 digitalWrite(9,LOW); //점은 표시 안하기
 }
 
 void loop(){
 	//k값을 0~9로 변화시킴
    for(int k=0;k<=9;k++){
    	fndDisplay74595(k)//k를 fnd에 출력하는 함수
        delay(1000);
       }
}

void fndDisplay74595(int k){
	//STCP에 LOW신호를 보내서 74595로 데이터전송을 시작함
    digitalWrtie(stcp,LOW);
    
    //shiftout명령어로 74595에 출력을 보낸다
    shiftOut(ds,shcp,MSBFIRST,number[k]);
    
    //STCP에 HIGH신호를 보내서 데이터전송을 종료한다
    digitalWrite(stcp,HIGH);
    }
}

 

 

728x90

'2022-2 > 마이크로프로세서' 카테고리의 다른 글

6. Analog Input  (1) 2022.11.01
5. Digital Signal Input  (0) 2022.10.23
아두이노와 기타등등 알아보기  (0) 2022.10.14
4-2 LED  (0) 2022.10.10
3. LCD Display  (4) 2022.09.28

댓글