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

임베디드 보드

번호 제목 글쓴이 날짜 조회수
78 마이크로비트 아날로그 홀 센서 활용 (아두이노 센서 활용) icon HellMaker 08-08 21,380
77 마이크로비트 마이크로비트로 가위바위보 게임 일산메이커 08-01 20,743
76 마이크로비트 마이크로 비트로 led 문자 출력하기 2 #microbit #마이크로비트 #led Wavy 07-31 20,110
75 마이크로비트 마이크로비트 - led로 문자출력하기 #마이크로비트 #led #문자 #microbit +1 Wavy 07-30 19,816
74 마이크로비트 마이크로 비트로 간단하게 led켜기 (microbit easy led) #microbit #LED #led Wavy 07-24 20,565
73 마이크로비트 마이크로비트 교육자료 - 반응속도 게임 +1 일산메이커 07-19 22,225
72 아두이노 C 언어 비교문에서 == 사용 방법 icon 양재동메이커 04-12 23,278
71 아두이노 [아두이노 실습] 푸쉬버튼 long press, short press 판단하기 icon 양재동메이커 03-27 23,327
70 아두이노 [아두이노 실습] Push button 스위치로 FND 카운트 증가/감소 icon 양재동메이커 03-27 28,000
69 아두이노 Blynk를 사용해 아두이노에서 IoT 맛보기 icon 양재동메이커 03-27 24,840
68 아두이노 아두이노에서 u8glib로 0.96" OLED 사용하기 icon 양재동메이커 03-27 24,384
67 아두이노 아두이노에서 여러개의 스위치를 1개의 analog input핀으로 검사하기 icon 양재동메이커 03-27 22,968
66 아두이노 아두이노에서 RTOS 사용하기 (FreeRTOS in Arduino) icon 양재동메이커 03-27 27,428
65 아두이노 아두이노에서의 delay() 함수 icon 양재동메이커 03-27 21,715
64 아두이노 아두이노의 pinMode()에서 INPUT과 INPUT_PULLUP의 차이 icon 양재동메이커 03-27 24,010
63 아두이노 아두이노등의 임베디드 시스템의 변수 값 오버플로우 문제 icon 양재동메이커 03-27 21,715
62 아두이노 아두이노에서 외부 라이브러리 설치하기 (Install library in arduino) icon 양재동메이커 03-27 23,807
61 아두이노 WS2812 color LED 사용하기 icon 양재동메이커 03-27 22,246
60 아두이노 WS2812와 APA102의 차이 비교 (Comparison between WS2812 and APA102) icon 양재동메이커 03-27 25,415
59 아두이노 [강좌] 51. 와이파이 통신 (5) - WebServer 예제 (2) icon 양재동메이커 03-21 21,655