상세 컨텐츠

본문 제목

006. Arduino 아두이노 - LED 제어하기, 아두이노 LED 예제

embedded/arduino

by ZelKun 2016. 1. 30. 12:10

본문

반응형

아두이노로 할 수 있는

가장 기본적인 LED(Light-Emitting Diode)를 이용한 테스트를 해보려 합니다

   

   

   

사진 출처: https://github.com/Bouni/Arduino-Pinout

   

   

   

   

   

사진 : Fritzing

   

핀 배치는 위처럼

GND를 LED의 짧은 선에

13번 핀을 LED의 긴 선에

연결하면 됩니다

   

매우 간단하죠?

   

LED는 직렬 전류를 이용하며

긴 선이 +전압을 받고

짧은 선이 -전압을 받습니다

   

GND는 Digital Ground 를 뜻하며

접지, 기준전압 등등 어려운 말들이 많이 있지만

- 극으로 생각하면 편합니다...

   

이제 실제 코드를 볼까요 - https://www.arduino.cc/en/Reference/DigitalWrite

int ledPin = 13; // LED connected to digital pin 13

void setup(){

    pinMode(ledPin, OUTPUT);      // sets the digital pin 13 as output

}

   

void loop(){

    digitalWrite(ledPin, HIGH);    // set the LED on

    delay(1000) // waits for a second

    digitalWrite(ledPin, LOW);    // set the LED off

    delay(1000) // waits for a second

}

digitalWrite(13, HIGH); 으로 작성해도 되지만

핀번호 변경에 유연함을 위해 변수로 사용했네요

   

   


<!-- 16.02.18 추가 -->

동영상을 첨부했는줄 알았는데 안되있어 다시 올립니다




  

되네요

   

이번에 하려는 예제는 원래 잘 안하는데

GND 없이 LED를 켤 수 있습니다

digitalWrite(ledPin, LOW); 을 이용하는겁니다

디지털 /출력은 결국은 1(+) / 0(-) 이니까요

   

   

사진 : Fritzing

GND에 연결된선을 12번 핀으로 이동합니다

   

int ledPin = 13; // LED connected to digital pin 13

int gndPin = 12;

   

void setup(){

    pinMode(ledPin, OUTPUT);      // sets the digital pin 13 as output

    pinMode(gndPin, OUTPUT);

    digitalWrite(gndPin, LOW);

}

   

void loop(){

    digitalWrite(ledPin, HIGH);    // set the LED on

    delay(1000) // waits for a second

    digitalWrite(ledPin, LOW);    // set the LED off

    delay(1000) // waits for a second

}

   

12 핀은 loop에서 사용할 필요가 없으니

setup에다 넣었습니다

   

실행해보면

   






잘되네요

   

정상적으로 동작합니다

   

근데 한개만 해보면 재미없으니 3개를 제어해보죠

사진 : Fritzing

검은색이 GND이고 2, 3, 4 번 핀을 사용했어요

4번이 빨강, 3번이 녹색, 2번이 파랑 입니다

   




   


int red = 2;

int green = 3;

int blue = 4;

   

void setup() {

    Serial.begin(9600);

    Serial.println("LED TEST START");

    pinMode(red, OUTPUT);

    pinMode(green, OUTPUT);

    pinMode(blue, OUTPUT);

}

   

void loop() {

    Serial.println("RED LED on");

    digitalWrite(red, HIGH);

    digitalWrite(green, LOW);

    digitalWrite(blue, LOW);

    delay(1000);

   

    Serial.println("GREEN LED on");

    digitalWrite(red, LOW);

    digitalWrite(green, HIGH);

    digitalWrite(blue, LOW);

    delay(1000);

   

    Serial.println("BLUE LED on");

    digitalWrite(red, LOW);

    digitalWrite(green, LOW);

    digitalWrite(blue, HIGH);

    delay(1000);

}


   

근데 코드가 식상하니

프로그램처럼 바꿔 봅시다

   

int ledPin[] = { 2,3,4 }; //2 red, 3 green, 4 blue

char color[] = { 'r', 'g', 'b' };

   

void setup() {

    Serial.begin(9600); //시리얼 모니터 통신 속도

    Serial.println("RGB LED START");

    for (int i = 0; i < sizeof(ledPin); i++) {

        pinMode(ledPin[i], OUTPUT);

    }

}

   

void loop() {

    for (int i = 0; i < sizeof(ledPin); i++) {

        Serial.print(color[i]);

        Serial.print(" on");

        for (int j = 0; j < sizeof(ledPin); j++) {

            digitalWrite(ledPin[j], LOW); //전체 LED

        }

        digitalWrite(ledPin[i], HIGH); //LED on

        delay(100); //지연시간 추가

    }

}

동일한 기능을 하는 소스이지만 뭔가 어렵죠?

반복문을 2번사용한건

각 색상별로 LED에 HIGH으로 전기가 들어가면

안 꺼지기 때문에 전부 LOW 시키고

다시 HIGH 시켜서 색상별로 불이 들어옵니다

digitalWrite(ledPin[j], LOW); 부분을 주석처리하면

3색이 전부 불이 들어올테니

확인해보시길 바래요


관련글

[embedded/arduino] - 006. Arduino 아두이노 - LED 제어하기, 아두이노 LED 예제

[embedded/arduino] - 007. Arduino 아두이노 - 2색, 3색 LED 제어하기, 아두이노 3색 LED 예제



반응형

관련글 더보기

댓글 영역