타이머인터럽트는 정말로 많이 쓰인다.
시스템을 구성할 때 여러개를 동시에 돌려야 하기 때문에!
void loop()에서는 순차적으로 모든 프로세스를 해결한다.
그렇지만 타이머인터럽트를 쓰게되면 원하는 시간에 원하는 작업을 진행할 수 있다.
RTOS를 대체할 수 있는?? 기능이라고 생각해도 될거같음!!
<소스>
#include "string.h"
#include <MsTimer2.h>
/* TimerCnt */
int Timer;
void ISR_Timer()
{
Timer++;
if(Timer>1000)
{
Serial.print("1sec\n");
Timer = 0;
}
}
void setup()
{
MsTimer2::set(1,ISR_Timer); //1ms, ISR_Timer
MsTimer2::start();
Serial.begin(9600); //Serial Baudrate Set
}
void loop() //system loop
{
}
</소스>
<동작 설명>
MsTimer2 라는 라이브러리를 추가 하시고(라이브러리 추가하는 방법 게시글 확인)
라이브러리 다운 ( http://cafe.naver.com/dunoino/5 )
#include <MsTimer2.h> 를 추가합니다.
loop문에 소스가 없이 타이머인터럽트를 이용하여서 원하는 작업을 할 수 있습니다.
해당 소스는 1ms주기로 ISR_Timer()이라는 함수를 호출하여 Timer이라는 변수를 1씩 증가시켜줍니다.
Timer이란 변수가 1000을 넘어가게 되면, 즉 1000ms(1초)가 되면 1sec를 시리얼통신을 통해 시리얼모니터에 출력시키게 됩니다.
그 후 Timer이라는 변수를 다시 0으로 초기화 시켜 주게 된다면 위의 소스는 1초에 1번씩 1sec를 시리얼모니터에 출력시킵니다.
Serial.print("1sec\n");
이라는 함수 대신에 LED를 켠다던지, 원하는 작업을 하시면 됩니다.
1초가 아니라 2초를 원하신다면 if(Timer>2000)이라고 수정하시면 되겠죠?
'개발 > 아두이노' 카테고리의 다른 글
[아두이노] TFT LCD 구동소스 (0) | 2014.12.09 |
---|---|
[아두이노] 지문인식 모듈 구동 소스 (0) | 2014.12.09 |
[아두이노] LCD 동작소스코드 (0) | 2014.12.09 |
[아두이노] 블루투스 통신 소스 (0) | 2014.12.09 |
[아두이노] 라이브러리 추가하는 방법 (0) | 2014.12.09 |