스파크펀 7-세그먼트 디스플레이로 신뢰할 수 있는 아두이노 카운트다운 타이머 만들기
부품 및 소모품
| 부품 |
수량 |
| 브레드보드 (일반) |
1 |
| 점퍼 와이어 (일반) |
1 |
| 스파크펀 7-세그먼트 시리얼 디스플레이 - 레드 (브레이크아웃 보드 미사용) |
1 |
| USB-A to 미니 USB 케이블 |
1 |
| 아두이노 메가 2560 |
1 |
앱 및 온라인 서비스
프로젝트 개요
이 프로젝트는 수중에 타이머가 없어서 직접 만들게 되었습니다. 아두이노(어떤 종류든 상관없음)에 코드를 업로드하면 카운트다운이 자동으로 시작됩니다. 총 시간을 변경하려면 코드의 다음 부분을 수정하세요.
long n = 60000; // 시작 시간(밀리초) - 원하는 시간으로 변경 가능
중요: 1000 = 1초입니다. 따라서 60000 = 60초이며, 공식 (초 × 1000)을 사용해 밀리초 단위 값을 구해 60000 자리에 넣으면 됩니다. 리셋 버튼을 누르면 카운터가 자동으로 재시작합니다.
코드
아래 코드를 아두이노에 업로드하여 카운트다운 타이머를 실행하세요. 7-세그먼트 디스플레이 핀 연결은 주석을 참조하십시오.
// 7-세그먼트 핀 번호 - 7-세그먼트 라이트 - 아두이노 핀 번호
// pin 11 - A = 12
// pin 7 - B = 10
// pin 4 - C = 8
// pin 2 - D = 7
// pin 1 - E = 6
// pin 10 - F = 11
// pin 5 - G = 9
// pin 3 - 소수점
const int a = 12;
const int b = 10;
const int c = 8;
const int d = 7;
const int e = 6;
const int f = 11;
const int g = 9;
int p = 0;
int startStopReset = 13;
const int d1 = 1;
const int d2 = 2;
const int d3 = 3;
const int d4 = 4;
long n = 60000; // 시작 시간 - 원하는 시간으로 변경
int x = 100;
int del = 55; // 지연 값
void setup() {
pinMode(d1, OUTPUT);
pinMode(d2, OUTPUT);
pinMode(d3, OUTPUT);
pinMode(d4, OUTPUT);
pinMode(a, OUTPUT);
pinMode(b, OUTPUT);
pinMode(c, OUTPUT);
pinMode(d, OUTPUT);
pinMode(e, OUTPUT);
pinMode(f, OUTPUT);
pinMode(g, OUTPUT);
pinMode(p, OUTPUT);
pinMode(startStopReset, INPUT);
digitalWrite(startStopReset, HIGH);
}
void loop() {
digitalWrite(p, HIGH);
clearLEDs();
pickDigit(1);
pickNumber((n / x / 1000) % 10);
delayMicroseconds(del);
clearLEDs();
pickDigit(2);
pickNumber((n / x / 100) % 10);
delayMicroseconds(del);
clearLEDs();
pickDigit(3);
dispDec(3);
pickNumber((n / x / 10) % 10);
delayMicroseconds(del);
clearLEDs();
pickDigit(4);
pickNumber(n / x % 10);
delayMicroseconds(del);
n--; // 'n++'로 변경 시 스톱워치 모드
if (digitalRead(13) == LOW) {
n = 60000; // 재시작 시간 - 원래 설정한 시간으로 변경
}
}
void pickDigit(int x) { // 자릿수 선택
digitalWrite(d1, HIGH);
digitalWrite(d2, HIGH);
digitalWrite(d3, HIGH);
digitalWrite(d4, HIGH);
switch (x) {
case 1: digitalWrite(d1, LOW); break;
case 2: digitalWrite(d2, LOW); break;
case 3: digitalWrite(d3, LOW); digitalWrite(p, HIGH); break;
default: digitalWrite(d4, LOW); break;
}
}
void pickNumber(int x) { // 숫자 표시
switch (x) {
default: zero(); break;
case 1: one(); break;
case 2: two(); break;
case 3: three(); break;
case 4: four(); break;
case 5: five(); break;
case 6: six(); break;
case 7: seven(); break;
case 8: eight(); break;
case 9: nine(); break;
}
}
void dispDec(int x) { digitalWrite(p, LOW); }
void clearLEDs() {
digitalWrite(a, LOW); digitalWrite(b, LOW); digitalWrite(c, LOW);
digitalWrite(d, LOW); digitalWrite(e, LOW); digitalWrite(f, LOW);
digitalWrite(g, LOW); digitalWrite(p, LOW);
}
// 0~9 세그먼트 패턴 함수들 (zero() ~ nine())
void zero() { digitalWrite(a, HIGH); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, HIGH); digitalWrite(e, HIGH); digitalWrite(f, HIGH); digitalWrite(g, LOW); }
void one() { digitalWrite(a, LOW); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, LOW); digitalWrite(e, LOW); digitalWrite(f, LOW); digitalWrite(g, LOW); }
void two() { digitalWrite(a, HIGH); digitalWrite(b, HIGH); digitalWrite(c, LOW); digitalWrite(d, HIGH); digitalWrite(e, HIGH); digitalWrite(f, LOW); digitalWrite(g, HIGH); }
void three() { digitalWrite(a, HIGH); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, HIGH); digitalWrite(e, LOW); digitalWrite(f, LOW); digitalWrite(g, HIGH); }
void four() { digitalWrite(a, LOW); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, LOW); digitalWrite(e, LOW); digitalWrite(f, HIGH); digitalWrite(g, HIGH); }
void five() { digitalWrite(a, HIGH); digitalWrite(b, LOW); digitalWrite(c, HIGH); digitalWrite(d, HIGH); digitalWrite(e, LOW); digitalWrite(f, HIGH); digitalWrite(g, HIGH); }
void six() { digitalWrite(a, HIGH); digitalWrite(b, LOW); digitalWrite(c, HIGH); digitalWrite(d, HIGH); digitalWrite(e, HIGH); digitalWrite(f, HIGH); digitalWrite(g, HIGH); }
void seven() { digitalWrite(a, HIGH); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, LOW); digitalWrite(e, LOW); digitalWrite(f, LOW); digitalWrite(g, LOW); }
void eight() { digitalWrite(a, HIGH); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, HIGH); digitalWrite(e, HIGH); digitalWrite(f, HIGH); digitalWrite(g, HIGH); }
void nine() { digitalWrite(a, HIGH); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, HIGH); digitalWrite(e, LOW); digitalWrite(f, HIGH); digitalWrite(g, HIGH); }
회로도
아래 연결도를 참고하여 4자리 7-세그먼트 디스플레이를 아두이노에 연결하세요.
