다시 7 segment로 count down(카운트 다운)을 다시 만들려고 하니. 갑갑해졌다.
정보도 찾기 힘들고. 이번기회에 정리해야지.
7 segment에 대한 좋은 정보는 여기서 확인할 수 있다.
anode type, cathod type이 있다는 것을 처음 알았다. 다 같은 녀석인줄 알았더니 아니구나.
http://cafe.naver.com/digiglue.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=25&
내가 가지고 있는 제품은 udg-1056A 라는 7 segment이다.
아두이노 핀과 7 segment와 잘 연결한다.
Arduino Pin | 7 Segment Pin Connection |
2 | 7 (A) |
3 | 6 (B) |
4 | 4 (C) |
5 | 2 (D) |
6 | 1 (E) |
7 | 9 (F) |
8 | 10 (G) |
9 | 5 (DP) |
8 번 GND과 3.3V connection pin 사이에 저항을 잘 둔다.
간단한 count down 코드 테스트
void setup() {
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
digitalWrite(9, 0); // start with the "dot" off
}
void loop() {
// write '9'
digitalWrite(2, 0);
digitalWrite(3, 0);
digitalWrite(4, 0);
digitalWrite(5, 1);
digitalWrite(6, 1);
digitalWrite(7, 0);
digitalWrite(8, 0);
delay(1000);
// write '8'
digitalWrite(2, 0);
digitalWrite(3, 0);
digitalWrite(4, 0);
digitalWrite(5, 0);
digitalWrite(6, 0);
digitalWrite(7, 0);
digitalWrite(8, 0);
delay(1000);
// write '7'
digitalWrite(2, 0);
digitalWrite(3, 0);
digitalWrite(4, 0);
digitalWrite(5, 1);
digitalWrite(6, 1);
digitalWrite(7, 1);
digitalWrite(8, 1);
delay(1000);
// write '6'
digitalWrite(2, 0);
digitalWrite(3, 1);
digitalWrite(4, 0);
digitalWrite(5, 0);
digitalWrite(6, 0);
digitalWrite(7, 0);
digitalWrite(8, 0);
delay(1000);
// write '5'
digitalWrite(2, 0);
digitalWrite(3, 1);
digitalWrite(4, 0);
digitalWrite(5, 0);
digitalWrite(6, 1);
digitalWrite(7, 0);
digitalWrite(8, 0);
delay(1000);
// write '4'
digitalWrite(2, 1);
digitalWrite(3, 0);
digitalWrite(4, 0);
digitalWrite(5, 1);
digitalWrite(6, 1);
digitalWrite(7, 0);
digitalWrite(8, 0);
delay(1000);
// write '3'
digitalWrite(2, 0);
digitalWrite(3, 0);
digitalWrite(4, 0);
digitalWrite(5, 0);
digitalWrite(6, 1);
digitalWrite(7, 1);
digitalWrite(8, 0);
delay(1000);
// write '2'
digitalWrite(2, 0);
digitalWrite(3, 0);
digitalWrite(4, 1);
digitalWrite(5, 0);
digitalWrite(6, 0);
digitalWrite(7, 1);
digitalWrite(8, 0);
delay(1000);
// write '1'
digitalWrite(2, 1);
digitalWrite(3, 0);
digitalWrite(4, 0);
digitalWrite(5, 1);
digitalWrite(6, 1);
digitalWrite(7, 1);
digitalWrite(8, 1);
delay(1000);
// write '0'
digitalWrite(2, 0);
digitalWrite(3, 0);
digitalWrite(4, 0);
digitalWrite(5, 0);
digitalWrite(6, 0);
digitalWrite(7, 0);
digitalWrite(8, 1);
delay(4000);
}
여기서 배열을 사용한 사례이다.
byte seven_seg_digits[10][7] = { { 0,0,0,0,0,0,1 }, // = 0
{ 1,0,0,1,1,1,1 }, // = 1
{ 0,0,1,0,0,1,0 }, // = 2
{ 0,0,0,0,1,1,0 }, // = 3
{ 1,0,0,1,1,0,0 }, // = 4
{ 0,1,0,0,1,0,0 }, // = 5
{ 0,1,0,0,0,0,0 }, // = 6
{ 0,0,0,1,1,1,1 }, // = 7
{ 0,0,0,0,0,0,0 }, // = 8
{ 0,0,0,1,1,0,0 } // = 9
};
void setup() {
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
writeDot(0); // start with the "dot" off
}
void writeDot(byte dot) {
digitalWrite(9, dot);
}
void sevenSegWrite(byte digit) {
byte pin = 2;
for (byte segCount = 0; segCount < 7; ++segCount) {
digitalWrite(pin, seven_seg_digits[digit][segCount]);
++pin;
}
}
void loop() {
for (byte count = 10; count > 0; --count) {
delay(1000);
sevenSegWrite(count - 1);
}
delay(4000);
}
idea :
http://www.hacktronics.com/Tutorials/arduino-and-7-segment-led.html
내가 쓰고 있는 7 segment와 약간 달라서 조금 수정
'아두이노' 카테고리의 다른 글
아두이노 (arduino) 에 리모콘 콘트롤러 (remote controller) 이용하여 적외선(ir) 테스트해보기 (0) | 2011.11.16 |
---|---|
아두이노 전자파(정확히 말하면 전자기파) 측정기 (EMF Detector) 소스 공유 (5) | 2011.11.03 |
아두이노(arduino)에서 time 사용하기 (0) | 2011.11.01 |
가변저항 (0) | 2011.11.01 |
무한도전 Speed를 보고 데모용 아두이노 만들어보다. (0) | 2011.10.06 |