본문 바로가기
IoT/아두이노

아두이노(arduino) msTimer2 library 오류

by eeeun:) 2021. 12. 20.
반응형

| msTimer2 library 설치 후 컴파일 오류!

In file included from C:\Users\tmddm\arduino\Temperature_Sensor\Temperature_Sensor.ino:5:
C:\Users\tmddm\OneDrive\����\Arduino\libraries\MsTimer2/MsTimer2.h:9:2: error: #error MsTimer2 library only works on AVR architecture
9 | #error MsTimer2 library only works on AVR architecture

AVR architecture에서는 msTimer2를 사용할 수 없다는데,

아키텍처가 다르다 = 아두이노의 cpu의 구조가 다르다

결국 현재 내가 쓰고 있는 wemos esp-8266은 사용할 수 없는 msTimer2

(아두이노 우노에서는 될 것이다... 아마도..?)

 

| 해결방법

  1. esp-8266 아키텍처에 맞는 Time Interrupt 라이브러리로 대체해서 사용하자
  2. 컴파일 시 아키텍처를 변경해서(esp-8266은 AVR architecture가 아니지만 끼워 넣는 식으로..?) 해결할 수 있다는데 이 방법은 정확히 모르겠다
  3. Time Interrupt를 간단하게 구현해보자

나는 3번째 방법으로 해결해보았다.

Time Interrupt가 무엇인지 모른다면 밑에 링크를 참고하자.

 

간단히 습도 센서를 통해 1초마다 값을 가져오는 기능을 구현했다.

loop 흐름을 방해하지 않는 간단한 Time Interrupt를 구현해보았다.

#include <DHT.h>

#define PHTPIN D6
#define DHTTYPE DHT11
#define TIMER_INTERVAL_MS 1000 * 10

DHT dht(PHTPIN, DHTTYPE);
unsigned mark = 0;

class Temperature{
  public:
  void  set() {
    pinMode(PHTPIN, INPUT);
    dht.begin();
  }
  float  get() {
    float h = dht.readHumidity();
    return (h);
  }
}tempt;

void setup() {
  Serial.begin(9600);
  tempt.set();
}

void  loop() {
  //time interrupt part
  if (mark < millis()) {
    mark = millis() + TIMER_INTERVAL_MS;
    Serial.printf("humidity : %.2f\n", tempt.get());
  }
}
millis()는 아두이노 보드가 현재 프로그램을 돌리기 시작한 후 지난 밀리 초 숫자를 반환한다. 이 숫자는 약 50일 후에 오버플로우(0으로 돌아감)가 된다.

 

728x90

댓글