[아두이노] [강좌] 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
이 글을 페이스북으로 퍼가기 이 글을 트위터로 퍼가기 이 글을 카카오스토리로 퍼가기 이 글을 밴드로 퍼가기

임베디드 보드

번호 제목 글쓴이 날짜 조회수
58 아두이노 [강좌] 50. 와이파이 통신 (4) - WebServer 예제 icon 양재동메이커 03-21 12,873
57 아두이노 [강좌] 49. 와이파이 통신 (3) - WebClient 예제 icon 양재동메이커 03-21 16,345
56 아두이노 [강좌] 48. 와이파이 통신 (2) - 커맨드 모드 사용하기 (WiFly 쉴드) icon 양재동메이커 03-20 11,665
55 아두이노 [강좌] 47. 와이파이 통신 (1) - 와이파이란 무엇인가 icon 양재동메이커 03-20 16,094
54 아두이노 [강좌] 46. 블루투스 통신 (5) - 프로토콜 만들기 (2) icon 양재동메이커 03-20 11,884
53 아두이노 [강좌] 45. 블루투스 통신 (4) - 프로토콜 만들기 (1) icon 양재동메이커 03-20 13,513
52 아두이노 [강좌] 44. 블루투스 통신 (3) - RN42 모듈에서 직접 접속하기 icon 양재동메이커 03-20 10,567
51 아두이노 [강좌] 43. 블루투스 통신 (2) - 스마트폰과 통신하기 icon 양재동메이커 03-20 12,728
50 아두이노 [강좌] 42. 블루투스 통신 (1) - RN42 블루투스 모듈 실습하기 icon 양재동메이커 03-20 14,030
49 아두이노 [강좌] 41. 서보 모터 (2) - Servo 함수 알아보기 icon 양재동메이커 03-20 15,784
48 아두이노 [아두이노 강좌] 40. 서보 모터 (1) - 서보 모터 동작 방식 icon 양재동메이커 03-20 16,141
47 아두이노 [강좌] 39. 스텝 모터 (3) - 모터 드라이버 EasyDriver(A3967) 사용하기 icon 양재동메이커 03-20 12,008
46 아두이노 [강좌] 38. 스텝 모터 (2) - Stepper 함수 알아보기 icon 양재동메이커 03-20 15,843
45 아두이노 [강좌] 37. 스텝 모터 (1) - 스텝 모터 동작 방식 icon 양재동메이커 03-20 12,451
44 아두이노 [강좌] 36. DC 모터 (2) - DC 모터 드라이버 실습하기 (TB6612FNG) icon 양재동메이커 03-20 12,056
43 아두이노 [강좌] 35. DC 모터 (1) - DC 모터 동작 방식 icon 양재동메이커 03-20 14,561
42 아두이노 [강좌] 34. SPI 통신 (3) - 기압 센서(MPL115A1) 실습하기 icon 양재동메이커 03-20 11,309
41 아두이노 [강좌] 33. SPI 통신 (2) – SPI 함수 알아보기 icon 양재동메이커 03-20 18,031
40 아두이노 [강좌] 32. SPI 통신 (1) - SPI 통신이란 무엇인가 icon 양재동메이커 03-20 22,925
39 아두이노 [강좌] 31. I2C 통신 (3) - 온도 센서(TMP102) 실습하기 icon 양재동메이커 03-20 18,245