개발자/Arduino

4 digit 7 segment up down 카운터 만들기

지구빵집 2022. 5. 2. 08:23
반응형

 

 

요즘 4 digit 7 segment를 이용하여 카운터를 만들어 본다. 하나를 배우면 새로운 것을 더 많이 배우게 되고, 배우면 더 좋은 아이디어를 또 그만큼 만들어 낸다. 부를 얻는 일은 생산자가 되는 일이다. 성공한 사람들은 가치 있는 무언가를 끊임없이 생산해 필요한 사람들에게 제공한다. 더 많은 사람에게 더 많은 가치를 빠른 시간에 전달해 준다는 것은 대가로 무언가를 얻게 된다. 얻는 형태는 대부분 돈이라는 형태를 띠지만 꼭 돈이 아닐 수도 있다. 성공하고 싶다면 계속해서 기버, 제공하는 사람, 주는 사람, 가치를 제공하는 사람으로 살 각오를 해야 한다. 쉬운 일은 아니다. 

 

4 digit 7 segment up down 카운터 만들기 

 

본 포스팅에서는 4 digit 7 segment를 이용하여 업, 다운, 리셋이 가능한 카운터를 만들어 보기로 한다. 4 digit 7 segment에 대해서는 이전 포스팅에서 충분히 설명했으므로 아래 링크를 참고하고 여기서는 최대한 간단하게 설명하기로 한다. 외국 애들은 시간이 많은 건지, 똑똑한 건지, 아이디어가 많은 건지 설명이 독특하고, 재미있고 무엇보다 도움이 많이 된다. 상대적으로 우리는 그런면이 부족하다. 디테일도 부족하고, 섬세한 설명도 부족하고, 독특한 아이디어도 잘 보이지 않는다. 참고하는 사이트의 설명이나 표현이 재미있다. 잘 배우도록 한다. 그리고 배운 것은 삐른 시간 안에 써먹는다. 그래야 잊지 않는다. 

 

이전 포스팅 자료를 참고한다.

 

https://fishpoint.tistory.com/7077

 

아두이노 7 Segment LED 숫자 표시

친구들과 어울리기를 좋아하고, 늘 피곤한지 책상에 엎드려 자는 아이들, 무슨 꿍꿍이가 있는지 자기들끼리 소근대는 아이들을 본다. 시키지 않으면 하지 않지만 무어라도 한번 해보자고 하면

fishpoint.tistory.com

 

https://fishpoint.tistory.com/7054

 

4 Digit 7 Segment Display 아두이노 제어

시계, 숫자 표시 등 활용 분야가 많은 7 segment 제어를 실습한다. 시계 알람 설정을 다이얼 노브를 사용하여 설정하는 방법을 알아보는 중이다. 회로 연결도는 아래와 같다. 여기서 부저는 연결하

fishpoint.tistory.com

https://fishpoint.tistory.com/7056

 

아두아노 millis()함수 시간 다루기

​ 오늘은 아두이노 프로그래밍에서 자주 사용하는 millis( ) 함수에 대해 알아보겠습니다. millis 함수 레퍼런스를 참조는 이곳을 참고하시면 되고 여기서는 millis 함수를 사용해 읽은 값을 다루는

fishpoint.tistory.com

https://fishpoint.tistory.com/7055

 

아두이노 가변 저항 7-segment 에 표시하기 smart knob

가변저항 값이 약간 오차가 생기는 이유를 찾고 있다. 가변저항 값을 읽어 표시하는 코드 //a,b,c,d,e,f,g 상태값 const byte segValue[10][7] = { {1,1,1,1,1,1,0}, //0 {0,1,1,0,0,0,0}, //1 {1,1,0,1,1,0,1}, /..

fishpoint.tistory.com

https://fishpoint.tistory.com/7075

 

아두이노 포모도로 시계 만들기

디지털 기기와 정보에 주의를 빼앗기지 않고 몰입을 도와주는 아날로그같은 디지털 제품을 제공하기로 한다. 현대 사회에서 어떤 세대에 있어서도 몰입의 즐거움을 갖는 일은 어려운 일이다.

fishpoint.tistory.com

 

 

회로와 연결도 Schematics and circuit diagrams 

 

4 digit 7 segment up down 카운터 만들기

 

아래는 필요한 부품을 마치 코드처럼 표시했다. 물론 부품 설명과 파트넘버 사진은 참고 사이트에 올려져 있다. 표현이 참 귀엽다. 

 

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 카운터 만들기

 

 

참고

소스코드 깃허브

4 digit 7 segment up down 카운터 만들기  

유튜브 동작 영상

 

 

 

반응형