[아두이노] [강좌] 28. 시간 관련 함수 (3) - MsTimer2 라이브러리

난 시간에 delay() 함수 없이 1초 간격으로 LED를 깜빡이는 BlinkWithoutDelay 예제를 살펴봤었다. 이번 강좌에서는 delay() 없이 1초 간격을 만들 수 있는 또다른 방법, 타이머 라이브러리에 대해 알아보도록 하자. 



아두이노의 공식 홈페이지인 arduino.cc에서는 아두이노에 정식으로 탑재된 라이브러리들 외에도 사용자들이 공유한 라이브러리들 중 채택된 일부 라이브러리를 소개하고 있다. MsTimer2 라이브러리 역시 그러한 라이브러리들 중 하나인데, 1밀리초 단위의 타이머를 쉽게 사용할 수 있도록 만들어져 있다.



>> 다운로드 페이지 : http://playground.arduino.cc/Main/MsTimer2



설명에 따르면, MsTimer2 라이브러리는 사용자가 간단하고 쉽게 타이머를 사용할 수 있도록 만들어졌다고 자랑하고 있어. 


moon_and_james-5 




근데 자랑해도 됨. 정말 쉬우니까.



단 3개의 함수로 이루어져 있는데, 등록하고, 시작하고, 멈추는 기능의 3가지 함수이다. 함수 설명은 다음과 같다.




MsTimer2::set(ms, ISR)

 

 

타이머 주기와 타이머 인터럽트 처리 함수를 설정한다.



 매개 변수

 

 ms : 밀리초 단위로 타이머 주기를 정한다. unsigned long 타입이므로 약 50일 정도의 시간까지 설정할 수 있다.

 

 ISR : ms로 설정한 밀리초 주기마다 발생하는 타이머 인터럽트 처리 함수명타이머가 해제되기 전까지 주기적으로 호출된다인터럽트 함수이므로 loop() 구문의 내용과 관계 없이 독립적으로 호출된다.

 

 

 



ISR 함수는 외부 인터럽트(attachInterrupt() 함수 참고)에서 사용했던 ISR과 동일하게 loop() 구문의 내용과 관계없이 타이머 인터럽트(설정한 시간이 지나면 자동으로 발생)가 발생한 순간 자동으로 호출되기 때문에 loop() 함수에 delay() 함수가 사용되어도 전혀 영향을 받지 않는다. 


인터럽트에 대한 내용은 "인터럽트 강좌"의 초반 내용을 참고할 것.



MsTimer2::start()

 

타이머를 활성화한다이 함수가 호출된 순간부터 인터럽트가 발생매개 변수 없음.

 

 


MsTimer2::stop()

 

타이머를 해제한다이 후로 인터럽트 함수가 호출되지 않는다역시 매개 변수 엄슴.

 


 

아두이노 공식 홈페이지에서 MsTimer2 라이브러리를 다운로드 받으면 우노(Uno)에서는 사용할 수 있지만 메가(Mega 2560/ADK)에서는 사용할 수 없다메가의 칩인 ATmega2560은 아직 지원이 안되기 때문.

 

근데 MsTimer2에서 지원한다고 명시되어 있는 ATmega1280 칩이랑 ATmega2560 칩은 타이머 설정이 같다그래서 라이브러리 소스 파일에 “ define(__AVR_ATmega2560__)” 구문만 추가하면 메가에서도 사용할 수 있다.

 


똑같은데 왜 ATmega1280만 지원한다고 해놨을까잉.


 

암튼 메가(Mega 2560/ADK)에서도 사용할 수 있도록 수정된 라이브러리를 첨부 파일로 첨부해놨으니 필요한 사람은 받아가세요~



크롬에서 안받아지는 건 어쩌지;;;



안받아지는 사람은 위의 공식 홈페이지에서 파일을 다운로드 받은 후 MsTimer2.cpp 파일을 열고 "define(__AVR_ATmega1280__)"이라고 된 부분을 찾아 "define(__

AVR_ATmega2560__)"으로 고치거나 추가하면 된다. 




 ... 

 #if defined (__AVR_ATmega168__) || defined (__AVR_ATmega48__) || defined (__AVR_ATmega88__)  || defined (__AVR_ATmega328P__) || (__AVR_ATmega1280__) || (__AVR_ATmega2560__)

TIMSK2 &= ~(1<<TOIE2);

 ...


 



이런 식으로. 라이브러리 추가하는 방법은 글 마지막의 "*참고"를 참조.



MsTimer2 라이브러리를 사용하여 1초 간격으로 LED를 켜고 끄는 예제 소스를 첨부하면서 나는 이만. 뿅!


(소스 너무 쉬워서 설명할 것도 엄슴)


아! 라이브러리의 함수를 사용하기 위해서 "#include"로 해당 함수가 선언된 헤더 파일을 꼭 추가해줘야 한다는 것에 유의!!



 BlinkWithMsTimer2.ino

  

 #include <MsTimer2.h>


 int ledPin=13;

 int ledState=LOW;


 void setup() {

   pinMode(ledPin, OUTPUT);

  

   MsTimer2::set(1000, timerISR);

   MsTimer2::start();

  

   Serial.begin(9600);

 }


 void loop() {


 }


 void timerISR() {

   if(ledState == LOW) 

     ledState = HIGH;

   else 

     ledState = LOW;

    

   digitalWrite(ledPin, ledState);

   Serial.println("Timer Check");

 }






0
0
이 글을 페이스북으로 퍼가기 이 글을 트위터로 퍼가기 이 글을 카카오스토리로 퍼가기 이 글을 밴드로 퍼가기

임베디드 보드

번호 제목 글쓴이 날짜 조회수
38 아두이노 [강좌] 30. I2C 통신 (2) - Wire 함수 알아보기 icon 양재동메이커 03-20 23,756
37 아두이노 [강좌] 29. I2C 통신 (1) - I2C 통신이란 무엇인가 icon 양재동메이커 03-20 28,181
36 아두이노 [강좌] 28. 시간 관련 함수 (3) - MsTimer2 라이브러리 icon 양재동메이커 03-20 19,957
35 아두이노 [강좌] 27. 시간 관련 함수 (2) - BlinkWithoutDelay 예제 icon 양재동메이커 03-20 14,253
34 아두이노 [강좌] 26. 시간 관련 함수 (1) - delay() / millis() icon 양재동메이커 03-20 19,828
33 아두이노 [강좌] 25. tone()/noTone() 함수 (2) - 부저 실습 icon 양재동메이커 03-20 14,410
32 아두이노 [강좌] 24. tone()/noTone() 함수 (1) - 함수 설명 icon 양재동메이커 03-20 15,970
31 아두이노 [강좌] 23. Interrupt(인터럽트) (3) - 인터럽트 함수 알아보기 icon 양재동메이커 03-20 14,919
30 아두이노 [아두이노 강좌] 22. Interrupt(인터럽트) (2) - 스위치로 LED 켜고 끄기 예제 icon 양재동메이커 03-20 22,332
29 아두이노 [강좌] 21. Interrupt(인터럽트) (1) - 인터럽트란 무엇인가 icon 양재동메이커 03-16 14,590
28 아두이노 [아두이노 강좌] 20. String (3) - 유용한 함수들 icon 양재동메이커 03-16 22,402
27 아두이노 [강좌] 19. String (2) - String() 생성자와 + 연산 icon 양재동메이커 03-16 12,688
26 아두이노 [강좌] 18. String (1) - 문자형(char) 배열과 String icon 양재동메이커 03-16 22,445
25 아두이노 [강좌] 17. Serial 통신(3) - 유용한 기능들 icon 양재동메이커 03-15 16,700
24 아두이노 [강좌] 16. Serial 통신(2) - 시리얼 통신 함수 알아보기 icon 양재동메이커 03-15 21,012
23 아두이노 [강좌] 15. Serial 통신(1) - 시리얼 통신이란 무엇인가 icon 양재동메이커 03-15 19,285
22 아두이노 [강좌] 14. analogRead()/analogWrite() 실습 - 조도 센서 + LED icon 양재동메이커 03-15 12,660
21 아두이노 [강좌] 13. analogWrite() 실습 - LED 밝기 조절하기(Fade 예제) icon 양재동메이커 03-15 12,985
20 아두이노 [강좌] 12. 아날로그 기능(2) - analogWrite() 함수 icon 양재동메이커 03-14 14,505
19 아두이노 [강좌] 11. analogRead() 함수 실습 - 습도 센서 icon 양재동메이커 03-14 12,606