해당 게시물에서는 VS Code PlatformIO를 사용합니다. 참고바랍니다.
안녕하세요 데브구일입니다!
오늘은 SimpleTimer 라이브러리를 추가해서 타이머를 간단하게 사용해보겠습니다.
일반적으로 타이머를 생각하시면 시간? 알람? 등등 시간과 관련이 있는 부분을 알 수 있는데요.
타이머를 간단하게 말씀드리면,
특정시간이 지난 후에 동작하거나, 동일한 시간마다 동작을 반복할 수 있도록하는 기능입니다.
타이머 실습을 하기전에!!
지금까지 PlatformIO를 사용하면서 라이브러리 사용을 한번도 안했기 때문에
라이브러리를 추가하는 것부터 차근차근 알아보도록 하겠습니다!
라이브러리는 PlatformIO 아이콘을 누르시고,
왼쪽 탐색창에 있는 Libraries 메뉴 또는 PlatformIO 홈 화면에서 Libraries 메뉴
둘 중에 아무거나 누르시면 위와 같은 화면이 나오게됩니다!
그리고나서 검색창에 SimpleTimer를 검색해주시면,
검색된 결과 중에 SimpleTimer라는 라이브러리가 나오게되는데, 이걸 클릭해보겠습니다!
그럼 위와 같은 창이 뜨는데요.
여기서 Add to Project를 클릭하시면, 프로젝트를 선택할 수 있는 창이 뜨게됩니다.
추가하는 창이 나오면 라이브러리를 추가할 프로젝트를 선택하시고 Add 버튼을 클릭해주세요!
라이브러리가 잘 추가되었다면, 위와 같이 추가에 성공한 모습을 보실 수 있습니다.
이제 라이브러리를 사용해서 타이머를 간단하게 사용해보도록 하겠습니다.
먼저 코드는 아래와 같이 작성하도록 하겠습니다.
#include <Arduino.h> // PlatformIO IDE를 사용하시는게 아니라면 이 라인은 지워주세요!
#include <SimpleTimer.h> // SimpleTimer.h 라이브러리
#define LED_PIN 6 // LED핀 설정
SimpleTimer timer; // 타이머 선언
volatile byte state = LOW;
void blink() { // 타이머 호출 함수
digitalWrite(LED_PIN, state);
state = !state;
}
void setup() {
pinMode(LED_PIN, OUTPUT);
timer.setInterval(1000, blink); // 1초마다 blink 함수를 호출하도록 SET!
}
void loop() {
timer.run(); // 타이머 업데이트
}
이전에 사용했던 인터럽트 소스에서 조금 수정하였는데요!
먼저 라이브러리인 SimpleTimer를 include하고, 타이머를 전역변수로 선언하였습니다.
그리고 setup()에서 타이머 설정하였는데요.
여기서 timer.setInterval()이라는 함수를 사용하였습니다.
setInterval() 이라는 함수는 이번에 추가한 SimpleTimer 라이브러리 내부에 있는 함수인데요.
매개변수는 다음과 같습니다.
timer.setInterval(타이머 발생 시간(ms), 타이머 발생시 호출할 함수)
위 코드의 경우 1마다 blink 함수를 호출하도록 설정했습니다.
마지막으로 loop()에서 timer.run()이라는 함수를 호출하였는데요.
timer.run()는 타이머를 계속해서 업데이트 하기위한 함수이기때문에,
loop()에서 계속해서 호출해줘야만 타이머가 제대로 동작 할 수 있습니다.
(만약에 loop()안에 delay를 추가한다면 문제가 생길 수도 있겠지요?)
이제 코드를 업로드하시고 실행해보시면,
저희가 처음에 해보았던 LED blink와 동일하게 동작을 수행하게됩니다!
타이머가 호출하는 함수를 더 등록하는 것도 가능한데요!
이 부분은 setInterval 함수를 추가하는 것으로 가능한 부분입니다!
여러분들도 추가적으로 응용을 해보시는 것을 권해드립니다 :D
오늘은 간단하게 SimpleTimer 라이브러리를 사용하여 타이머를 사용해보았는데요.
다음으로 포스팅하고자 하는 부분은 블루투스랑 와이파이가 있는데요.
어떤걸 먼저 할지는... 재료가 먼저 준비되는걸 먼저 할 생각입니다 :D (하하)
아 그리고 타이머는 인터럽트와 함께 임베디드에서 굉장히 중요한 부분입니다.
그래서 이부분에 대해서는 추후에 좀 더 자세히 포스팅해보도록 하겠습니다 :D
감사합니다 :D
'Arduino' 카테고리의 다른 글
[PlatformIO] 아두이노와 아이폰 블루투스 통신하기 (HM-10 모듈) (0) | 2022.06.20 |
---|---|
[PlatformIO] SoftwareSerial 사용하기 (HM-10 모듈) (0) | 2022.06.19 |
[PlatformIO] 아두이노 인터럽트 사용하기 (0) | 2022.05.20 |
[PlatformIO] 아두이노 가변저항으로 LED 밝기 조절하기 (0) | 2022.05.19 |
[PlatformIO] 아두이노 PWM 사용하기 analogWrite() (0) | 2022.05.17 |