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);
}
}
'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 |
댓글