Skip to content

Arduino Software Interrupt

아두이노에서 하드웨어 인터럽트 (연결된 하드웨어(센서)를 지켜보고 있다가 신호가 있으면 즉시 어떤 코드를 실행) 는 2개 (Uno, nano) 사용할 수 있는데, 가끔 인터럽트가 더 많았으면 좋겠다 싶을 때도 있고, 또 때로는 일정한 시간마다 주기적으로 어떤 처리를 해야하는 경우 도 있다. 이럴 때 유용하게 쓸 수 있는 소프트웨어 인터럽트 (타이머) 활용법 대 공개!

아두이노에는 기본 3개의 타이머가 내장되어있는데, timer0, timer1, timer2이다. timer0은 delay()등의 시간관련 함수에서 내부적으로 사용하고, timer1은 서보라이브러리가 사용, timer2는 tone()에서 사용한다. 이 타이머도 일종의 인터럽트라고 할 수 있겠다. TimerOne라이브러리는 Timer1 타이머를 사용해 인터럽트를 구현토록 해준다.

TimerOne 라이브러리 설치

아두이노 메뉴 > 스케치 > 라이브러리 포함하기 > 라이브러리 매니저 에서 TimerOne 라이브러리를 검색 해 설치한다. 혹은 이곳에서 다운.

예제

/*
* 언제라도 버튼(핀7)누르면 즉시 불(핀13) 켜지는 회로
*/

#include <TimerOne.h>

void setup()
{
    pinMode(7,INPUT_PULLUP);

    Timer1.initialize(100000); // 1초마다 실행. in microseconds
    Timer1.attachInterrupt(intFunction);
}

void loop(){
    digitalWrite(13, LOW);
    delay(1000);
}

void intFunction(){
    if (digitalRead(7) == LOW){
        digitalWrite(13,HIGH);
    }
}

주의점

아두이노 서보 라이브러리가 Timer1을 사용하고있어 충돌이 일어날 수 있다. 그럴 땐 servo 라이브러리 대신 timer2를 사용하는 servotimer2 라이브러리를 사용해 충돌을 피하자.

ServoTimer2 사용하기 ServoTimer2 다운로드

아두이노 메가 등은 타이머가 총 6개 내장되어있고, 충돌을 피하기 위해 Timer3을 사용할 수 있다. TimerThree 라이브러리 다운로드

참고

한글자료: http://www.hardcopyworld.com/gnuboard5/bbs/board.php?bo_table=lecture_pract&wr_id=12

라이브러리 문서: http://playground.arduino.cc/Code/Timer1