아두이노로 할 수 있는
가장 기본적인 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 예제
008. Arduino 아두이노 - 스케치 시리얼 모니터(Seial Monitor) 사용방법 (0) | 2016.02.04 |
---|---|
007. Arduino 아두이노 - 2색, 3색 LED 제어하기, 아두이노 3색 LED 예제 (0) | 2016.02.01 |
005. Arduino 아두이노 - Visual Studio 2015 Community 사용하기 (0) | 2016.01.30 |
004. Arduino 아두이노 - 스크레치 문법 (디지털, 아날로그 입/출력) (0) | 2016.01.30 |
003. Arduino 아두이노 - 빵보드(Breadboard), 점퍼선(Jumper wire), 듀폰케이블(Dupone wire) 사용하기 (0) | 2016.01.30 |
댓글 영역