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

in kr-dev 커뮤니티4 years ago (edited)

안녕하세요! Jimae입니다.

방석으로 8번째나 글을 때우다니... 아직 반정도 온것같은대... 앞길이 막막하군요.

image.png

마치 저의 심정 인것같습니다.

오늘은!! 바로 인터럽트 라는것을 알아볼까 해요!

뜬금없이 왜냐구요?

저번에 올렸던 글에 인터럽트가 들어가는 부분이 무려 2개나 있어서요.

이걸 알아야지 프로그램이 어떤식으로 돌아가는지 알수있습니다.
제로부터 시작하는 극한의 아두이노 DIY생활 - LED2

아주 기본적인 부분은 이쪽에 설명 드렸습니다.

자 그래서 인터럽트라는건 무엇이냐면요.

image.png

이거에요! 농구에서 공을 빼앗을때 쓰는 인터셉트 처럼

프로그램도 실행하고 있는 순서를 빼앗고 다른 함수를 먼저 실행해 버리는 거죠.

즉 일정을 빼앗아서 급한것부터 먼저 처리하는게 인터럽트라고 생각하시면됩니다.

급한일정이 끝나면 다시 돌아가서 프로그램을 실행하는거죠

image.png

뭐 용어 정리한걸 보면 이렇습니다.

저번 프로그램으로 돌아갈까요?

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

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

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

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

라는 것들이 있습니다. 여기서 중요한건 1000, TimeCount 이걸 보시면되요.

MsTimer2는 하시다 보면 이해하실것들이라 지금은 신경 안쓰셔도 될것같습니다.

저거의 의미는 TimerCount 함수를 1초마다 인터럽트로 호출하겠다는 것입니다.

뭐 보시다 싶이 프로그램 자체에 설명이 되어있었내요.

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;
  }
}

즉 이함수를 1초마다 실행 하겠다는 의미입니다.

인터럽트로 설정이 되어있는거니 다른 프로그램을 실행하더라도 아두이노 내부에서 1초가되면 실행을 멈추고 TimeCount함수를 실행하고 TimeCount함수가 끝이 나면 다시 멈췄던 자리로 돌아가 프로그램을 다시 실행하죠.

그래서 인터럽트도 이렇다고 보시면 되요.

아까 2가지라고 했었는대 한가지는 1초단위로 실행하는것이고 나머지는요.

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

스위치를 따로 추가하여 타이머를 초기화 하는것이었내요.

아 이거 하드웨어 구성도 그려야하는댕... 흑... 깜빡하고 지나갔습니다.

아.. 하드웨어도 그려서 차라리 내일 설명 드리는게 맞을것 같내요!!

오늘은 인터럽트 까지만!! 다들 안녕히 주무세요!

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

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