극한의 아두이노 DIY생활 - 시간을 재는 방석7

in kr-dev 커뮤니티4 years ago

안녕하세요!! Jimae입니다!

오늘부터 프로그램을 분석해볼까 합니다.

총 4가지 의 기능이 들어가야 합니다.

1. FND를 주기적으로 Display해주는 기능

2. 시간을 카운트 해주는 기능

3. 압력센서의 데이터를 감지하는 기능

4. 사용자가 자리를 이탈했을때 시간을 초기화 해주는 기능

우선은 아두이노가 전원이 들어간후 실행이 되면 첫번째로 Setup 함수가 실행이 됩니다.

void setup() {
  // put your setup code here, to run once:

  FNDInit();
  TimeCountInit();
  SwitchInit();

  MsTimer2::set(1000, TimeCount); // TimeCount함수를 1초마다 호출한다
  MsTimer2::start();
  
  Serial.begin (9600);
}

Setup 함수 프로그램이 실행되기 위한 물리적인 하드웨어적인 부분을 전부 초기화 해준다고 보시면 됩니다.

FNDInit();
함수는 FND를 위해 각 3,4,5,6,7,8,9,10,11,12,13,A5,A4 Pin을 출력으로 초기화 해주기 위한 함수로 보시면되구요.

void FNDInit(void)
{
  for(unsigned char num = 0; num < sizeof(position_pin); num++)
  {
    pinMode(position_pin[num], OUTPUT);
    digitalWrite(position_pin[num], POSITION_OFF);
  }
  for(unsigned char num = 0; num < sizeof(segment_pin); num++)
  {
    pinMode(segment_pin[num], OUTPUT);
    digitalWrite(segment_pin[num], SEGMENT_OFF);
  }
}

TimeCountInit();
시간을 카운트 하기 위해 사용하는 타이머 변수들을 초기화 하는 함수

void TimeCountInit(void)
{ 
  second = 0;
  minute = 0;
  hour = 0;
}

SwitchInit();
지금 생각들었지만 시간을 초기화를 해주기위해 물리적으로 스위치를 따로 달아서 이기능을 넣었던것 같습니다.

void SwitchInit(void)
{
  pinMode(SWITCHPIN, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(SWITCHPIN), swInput, FALLING);
}

attachInterrupt 함수는 스위치가 눌렸을때 swlnput 함수를 실행하는 용도로 쓰이고 있구요. 인터럽트에 대한 기능은 설명드리면 되게 길어질수 있어 다음에 설명 드려보겠습니다.

void swInput(void)
{
  TimeCountInit();
}

swInput 스위치가 눌리면 타이머를 초기화 하는 인터럽트에 발생되어서 실행하는 함수 입니다.

MsTimer2::set(1000, TimeCount); // TimeCount함수를 1초마다 호출한다
MsTimer2::start();
시간을 카운트 하기 위해 사용하는 타이머 기능을 위해 초기화 하는 함수 및 바로 시작

void TimeCount(void)
{
  if(timeFlag != START) return;
  
  second++;

  if(second >= 60)
  {
    minute++;
    
    if(minute >= 60)
    {
      hour++;

      if(hour >= 24) hour = 0;
      minute = 0;
    }
    second = 0;
  }
}

TimeCount 1초마다 실행되며 timeFlag 의 변수가 START의 값을 가졌을때 부터 시간을 카운트 하기위해 있는 것입니다.

#define START 1       
#define STOP 0

second 1초 카운트 하는것이구요.
minute 1분 카운트 하는것이구요.
hour 1시간 카운트 하는것입니다.

각 변수들을 따로 카운트하여 최종적으로 FND에 출력해주기 위해 저렇게 구성을 했습니다.

Serial.begin (9600);
이거 같은경우 디버깅 용도로 사용하는 기능이라 현재 설명하는것에 필요없는 기능입니다.
빼셔도 됩니다.

오늘은 여기까지!! 우선 초기화 되는 함수들만 살펴 보았는대 생각보다 프로그램의 절반정도를 사용하고 있내요.

다른 개념들도 들어갔기에 이해가 안되는 부분이 조금조금 있을것 같습니다.

그래서 다음에 정리해서 올려보겠습니다.

다들 좋은 하루 되세요!

극한의 아두이노 DIY생활 - 시간을 재는 방석1
극한의 아두이노 DIY생활 - 시간을 재는 방석2
극한의 아두이노 DIY생활 - 시간을 재는 방석3
극한의 아두이노 DIY생활 - 시간을 재는 방석4
극한의 아두이노 DIY생활 - 시간을 재는 방석5
극한의 아두이노 DIY생활 - 시간을 재는 방석6

Sort:  
 4 years ago 

[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.

Coin Marketplace

STEEM 0.04
TRX 0.31
JST 0.074
BTC 63337.80
ETH 1663.24
USDT 1.00
SBD 0.41