본문 바로가기

아두이노

아두이노와 2개의 7세그먼트를 이용한 카운터 구현

회로구성

2개의 7세그먼트 회로

 

동작

2개의 7세그먼트를 이용하여 1~99까지 카운트 할 수 있는 카운터

00 → 01 02  …  98 99 00 01 02  …

최초 아두이노에 전원이 인가되면 00이 표시된다.

 

Tinkercad 구현

회로구성

 

코드설명

 

전체코드

int btn = 19;  // pin A5 == 19
int cur_btn_state = 0;  // 현재 버튼 상태
int pre_btn_state = 0;  // 이전 버튼 상태
int num1 = 0, num2 = 0;  // num1 = 1의 자리 수, num2 = 10의 자리 수
int FND1[7] = {2,3,4,5,6,7,8};  //abcedfg  
int FND2[7] = {9,10,11,12,13,14,15};  //abcedfg  
int FND_data[10] = {0xC0, 0xF9, 0xA4, 0xB0, 
                    0x99, 0x92, 0x82, 0xF8, 
                    0x80, 0x90};

int get_btn_state()
{
  while(1)
  {
    if(!digitalRead(btn))  // 버튼이 눌러진 상태 == LOW
    {
      while(!digitalRead(btn))
      { // 버튼이 눌러진 동안 아무것도 하지 않는다.
      }
      return !cur_btn_state;
    }
  }
}

void setup()
{
  pinMode(btn, INPUT_PULLUP);
  for(int i=0; i<7; i++)
  {
    // FND1 - 1의 자리 수
    pinMode(FND1[i], OUTPUT);
    digitalWrite(FND1[i], bitRead(FND_data[0], i));
    // FND2 - 10의 자리 수
    pinMode(FND2[i], OUTPUT);
    digitalWrite(FND2[i], bitRead(FND_data[0], i));
  }
}

void loop()
{
  cur_btn_state = get_btn_state();
  
  if((pre_btn_state == 0 && cur_btn_state == 1)||
     (pre_btn_state == 1 && cur_btn_state == 0))
  {
    if(num1 == 0)
    {
      for(int i=0; i<7; i++)
      	digitalWrite(FND2[i], bitRead(FND_data[num2], i)); 
      
      num2++;
      if(num2>=10)
        num2 = num2%10;
    }
    
    for(int i=0; i<7; i++)
      digitalWrite(FND1[i], bitRead(FND_data[num1], i));
    
    num1++;
    if(num1>=10)
      num1 = num1%10;
  }
  
  pre_btn_state = cur_btn_state;
}

 

Tinkercad 시뮬레이션 결과