#include <Led.h>
Led led(8);
boolean led_val = LOW;
void setup(){
}
void loop(){
delay(500);
led_val = !led_val;
led.setValue(led_val);
}
1) Timer0
2) Timer1
3) Timer2
1) 라이브러리 매니저로 MsTimer2 검색 후 설치
2) MsTimer2::set(unsigned long ms, void(*F)())
- 기능: 타이머2의 인터럽트 주기를 ms 단위로 설정하여, 설정된 시간이 경과되면 함수 f가 실행된다. 따라서. 설정된 시간마다 계속 함수 f가 실행된다.
- 매개변수
ms
f
// 타이머2 인터럽트 이용 LED 1초마다 토글
#include <Led.h>
#include <MsTimer2.h>
boolean led_val = LOW;
Led led(8);
void setup(){
// 타이머2 인터럽트 설정 및 동작시작
MsTimer::set(500, flash);
MsTimer::start();
}
void loop(){
}
//타이머2 인터럽트 함수, 500ms 마다 자동 실행
void flash()
{
led_val = !led_val;
led.setValue(led_val);
}
1) 라이브러리 매니저에서 TimerOne 검색 후 설치
2) void Timer1.initilalize(unsgined long perion)
- 기능: 타이머1을 초기화하며, 타이머1 라이브러리에서 제공하는 함수들을 사용하기 위해서는 이 함수를 우선 실행해야 한다. us단위로 타이머의 인터럽트 주기를 지정할 수 있다.(PMW 출력핀 ~9, ~10의 PWM 출력기능은 사용할 수 없다.)
- 매개변수
period: us 단위의 주기 값(unsigned long)
// LED 1초마다 토글, 타이머1 인터럽트 이용
#include <Led.h>
#include <TimerOne.h>
boolean led_val = LOW;
Led led(8);
void setup(){
//타이머 1 인터럽트 시작
Timer1.initialize(500000); // 500 ms 초
Timer1.attachinterrupt(false);
}
void loop(){
}
// 타이머 1 인터럽트 함수,
void flash(){
led_val = !led_val;
Led.setValue(led_val);
}
1) https://github.com/jfturcot/SimpleTimer 설치
- loop()함수에서 run() 메서드를 호출
- 콜백함수가 실행되었을 때 정확한 동작을 보장하지 않음
- SimpleTimer 한번 실행 시 5mS가 소요
(인터벌을 2mS로 지정하면 제대로 작동하지 않음)
(인터벌 타이머로 사용시에는 최소 5mS 이상의 인터벌 설정이 필요)
2) 주요 메서드
SimpleTimer(): 생성자
int setInerval(long d, timer_callback f)
d 밀리초마다 함수 f를 호출
f 의 sigature: void f()
Timer ID 리턴
int setTimeout(long d, timer_callback f)
d 밀리초 후에 함수 f 호출
한 번만 호출
int setTimer(long d, timer_callback f, int n)
d 밀리초마다 함수 f를 호출하되, n번 호출 이후 삭제됨
#include <SimplerTimer.h>
SimpleTimer timer;
//callback 함수
void repeatMe(){
Serial.print("Uptime (s): ");
Serial.println(millis() / 1000);
]
void setup(){
serial.begin(9600);
timer.setInterval(1000),repeatMe);
}
void loop(){
timer.run();
}