요즘 4 digit 7 segment를 이용하여 카운터를 만들어 본다. 하나를 배우면 새로운 것을 더 많이 배우게 되고, 배우면 더 좋은 아이디어를 또 그만큼 만들어 낸다. 부를 얻는 일은 생산자가 되는 일이다. 성공한 사람들은 가치 있는 무언가를 끊임없이 생산해 필요한 사람들에게 제공한다. 더 많은 사람에게 더 많은 가치를 빠른 시간에 전달해 준다는 것은 대가로 무언가를 얻게 된다. 얻는 형태는 대부분 돈이라는 형태를 띠지만 꼭 돈이 아닐 수도 있다. 성공하고 싶다면 계속해서 기버, 제공하는 사람, 주는 사람, 가치를 제공하는 사람으로 살 각오를 해야 한다. 쉬운 일은 아니다.
4 digit 7 segment up down 카운터 만들기
본 포스팅에서는 4 digit 7 segment를 이용하여 업, 다운, 리셋이 가능한 카운터를 만들어 보기로 한다. 4 digit 7 segment에 대해서는 이전 포스팅에서 충분히 설명했으므로 아래 링크를 참고하고 여기서는 최대한 간단하게 설명하기로 한다. 외국 애들은 시간이 많은 건지, 똑똑한 건지, 아이디어가 많은 건지 설명이 독특하고, 재미있고 무엇보다 도움이 많이 된다. 상대적으로 우리는 그런면이 부족하다. 디테일도 부족하고, 섬세한 설명도 부족하고, 독특한 아이디어도 잘 보이지 않는다. 참고하는 사이트의 설명이나 표현이 재미있다. 잘 배우도록 한다. 그리고 배운 것은 삐른 시간 안에 써먹는다. 그래야 잊지 않는다.
이전 포스팅 자료를 참고한다.
https://fishpoint.tistory.com/7077
https://fishpoint.tistory.com/7054
https://fishpoint.tistory.com/7056
https://fishpoint.tistory.com/7055
https://fishpoint.tistory.com/7075
회로와 연결도 Schematics and circuit diagrams
아래는 필요한 부품을 마치 코드처럼 표시했다. 물론 부품 설명과 파트넘버 사진은 참고 사이트에 올려져 있다. 표현이 참 귀엽다.
Components
Components Details () {
Solderless Breadboard,
Arduino Uno,
4 Digit Multiplexing 7Segment Display,
Push Button x 3,
Buzzer,
Male to Male Jumper Wires,
Battery clip,
Battery 9v
}
동작 코드는 아래와 같습니다. 주의 깊게 볼 코드는 업 버튼, 다운 버튼, 리셋 버튼을 누를 때 해당 숫자에서 다시 카운팅을 세어 나가는 코드다.
#define aPin 2 //
#define bPin 3 // _____
#define cPin 4 // | A |
#define dPin 5 // F |_____| B
#define ePin 6 // | G |
#define fPin 7 // E |_____| C
#define gPin 8 // D O dot
#define c1Pin 9 // Common pin for digit 1
#define c2Pin 10 // Common pin for digit 2
#define c3Pin 11 // Common pin for digit 3
#define c4Pin 12 // Common pin for digit 4
#define bt_up A0
#define bt_down A1
#define bt_reset A2
#define buzzer 13
long Counter=0;
int flag1=0, flag2=0, timer=0;
int Common = 1; //<Common=1; for Common anode> <Common=0; for Common cathode>
int On, Off, Off_C;
int DTime = 4; // Display timer
void setup(){ // put your setup code here, to run once
pinMode(bt_up, INPUT_PULLUP);
pinMode(bt_down, INPUT_PULLUP);
pinMode(bt_reset, INPUT_PULLUP);
pinMode(aPin, OUTPUT);
pinMode(bPin, OUTPUT);
pinMode(cPin, OUTPUT);
pinMode(dPin, OUTPUT);
pinMode(ePin, OUTPUT);
pinMode(fPin, OUTPUT);
pinMode(gPin, OUTPUT);
pinMode(c1Pin, OUTPUT);
pinMode(c2Pin, OUTPUT);
pinMode(c3Pin, OUTPUT);
pinMode(c4Pin, OUTPUT);
pinMode(buzzer, OUTPUT);
if(Common==1){On=0, Off=1, Off_C=0;} //for Common anode
else{On=1, Off=0, Off_C=1;} //for Common cathode
// Indicate that system is ready
for (int i = 9; i >=0; i--) {
showNumber(i);
digitalWrite(c1Pin, Common);
digitalWrite(c2Pin, Common);
digitalWrite(c3Pin, Common);
digitalWrite(c4Pin, Common);
delay(1000);
}
}
void loop(){
if(digitalRead (bt_up) == 0){
if(flag1==0){ flag1=1;
digitalWrite(buzzer, HIGH);
Counter = Counter+1;
if(Counter>9999){Counter=0;}
}
}else{flag1=0;}
if(digitalRead (bt_down) == 0){
if(flag2==0){ flag2=1;
digitalWrite(buzzer, HIGH);
Counter = Counter-1;
if(Counter<0){Counter=9999;}
}
}else{flag2=0;}
if(digitalRead (bt_reset) == 0){
digitalWrite(buzzer, HIGH);
if(timer<200){timer=timer+1;}
if(timer==200){
Counter=0;
}
}else{timer=0;}
showNumber((Counter/1000)%10);
digitalWrite(c1Pin, Common);
delay(DTime);
digitalWrite(c1Pin, Off_C);
showNumber((Counter/100)%10);
digitalWrite(c2Pin, Common);
delay(DTime);
digitalWrite(c2Pin, Off_C);
showNumber((Counter/10)%10);
digitalWrite(c3Pin, Common);
delay(DTime);
digitalWrite(c3Pin, Off_C);
showNumber(Counter%10);
digitalWrite(c4Pin, Common);
delay(DTime);
digitalWrite(c4Pin, Off_C);
digitalWrite(buzzer, LOW);
}
void showNumber(int x){
switch(x){
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;
default: zero(); break;
}
}
void one(){
digitalWrite( aPin, Off); //
digitalWrite( bPin, On); // |
digitalWrite( cPin, On); // |
digitalWrite( dPin, Off); // |
digitalWrite( ePin, Off); // |
digitalWrite( fPin, Off);
digitalWrite( gPin, Off);
}
void two(){
digitalWrite( aPin, On); // ____
digitalWrite( bPin, On); // |
digitalWrite( cPin, Off); // ____|
digitalWrite( dPin, On); // |
digitalWrite( ePin, On); // |____
digitalWrite( fPin, Off);
digitalWrite( gPin, On);
}
void three(){
digitalWrite( aPin, On); // ____
digitalWrite( bPin, On); // |
digitalWrite( cPin, On); // ____|
digitalWrite( dPin, On); // |
digitalWrite( ePin, Off); // ____|
digitalWrite( fPin, Off);
digitalWrite( gPin, On);
}
void four(){
digitalWrite( aPin, Off); //
digitalWrite( bPin, On); // | |
digitalWrite( cPin, On); // |____|
digitalWrite( dPin, Off); // |
digitalWrite( ePin, Off); // |
digitalWrite( fPin, On);
digitalWrite( gPin, On);
}
void five(){
digitalWrite( aPin, On); // ____
digitalWrite( bPin, Off); // |
digitalWrite( cPin, On); // |____
digitalWrite( dPin, On); // |
digitalWrite( ePin, Off); // ____|
digitalWrite( fPin, On);
digitalWrite( gPin, On);
}
void six(){
digitalWrite( aPin, On); // ____
digitalWrite( bPin, Off); // |
digitalWrite( cPin, On); // |____
digitalWrite( dPin, On); // | |
digitalWrite( ePin, On); // |____|
digitalWrite( fPin, On);
digitalWrite( gPin, On);
}
void seven(){
digitalWrite( aPin, On); // ____
digitalWrite( bPin, On); // |
digitalWrite( cPin, On); // |
digitalWrite( dPin, Off); // |
digitalWrite( ePin, Off); // |
digitalWrite( fPin, Off);
digitalWrite( gPin, Off);
}
void eight(){
digitalWrite( aPin, On); // ____
digitalWrite( bPin, On); // | |
digitalWrite( cPin, On); // |____|
digitalWrite( dPin, On); // | |
digitalWrite( ePin, On); // |____|
digitalWrite( fPin, On);
digitalWrite( gPin, On);
}
void nine(){
digitalWrite( aPin, On); // ____
digitalWrite( bPin, On); // | |
digitalWrite( cPin, On); // |____|
digitalWrite( dPin, On); // |
digitalWrite( ePin, Off); // ____|
digitalWrite( fPin, On);
digitalWrite( gPin, On);
}
void zero(){
digitalWrite( aPin, On); // ____
digitalWrite( bPin, On); // | |
digitalWrite( cPin, On); // | |
digitalWrite( dPin, On); // | |
digitalWrite( ePin, On); // |____|
digitalWrite( fPin, On);
digitalWrite( gPin, Off);
}
아래는 실제 동작 이미지고 참고 사이트에 가면 다양한 동작 사진과 설명 영상을 볼 수 있다.
참고
4 digit 7 segment up down 카운터 만들기
'개발자 > Arduino' 카테고리의 다른 글
아두이노 IDE 통합 개발환경 상세 설명 자료 무료 다운로드 (1) | 2022.10.25 |
---|---|
아두이노 I2C LCD로 문자 출력하기 (1) | 2022.10.25 |
아두이노 서보모터 제어 SG90 기초부터 전문가 까지 (1) | 2022.10.21 |
아두이노 전체 라이브러리 5103개 (1) | 2022.10.01 |
아두이노 7 Segment LED 숫자 표시 (0) | 2022.04.13 |
아두이노 DHT11 온도 습도 센서 실습 (0) | 2022.04.11 |
아두이노 포모도로 시계 만들기 (0) | 2022.04.11 |
Arduino Uno로 ATtiny13 프로그래밍 (0) | 2022.04.07 |
더욱 좋은 정보를 제공하겠습니다.~ ^^