상세 컨텐츠

본문 제목

025. Arduino 아두이노 - delay에 대한 고촬

embedded/arduino

by ZelKun 2019. 8. 24. 18:22

본문

반응형

이번에 온습도 센서를 구현하다보니

SolarWeatherStation 같이 5분단위로

내부 온도를 수집하도록 스케치 코딩을 하다가 보니…

 

delay 이후로 loop 돌지 않아서 심히 고생을했다…

 

google search

구글 검색결과 delay is not working?! 보인다

 

Syntax: delay(ms)

Parameters: ms: the number of milliseconds to pause. Allowed data types: unsigned long.

 

delay(1000); 은 millisecond 1초를 1000으로 생각하면 되는데

문제는 delay(60 * 1000); // 1min

이후로 동작을 하지 않는다…

 

delay말고 millis() 사용해서 지연시키는 예제도 있긴 하지만

50? 이후부터는 문제가 발생한다는 소리도 있고

굳이 5분단위로 다시 돌면 되는데 그렇게 까지 필요성을 느껴서

원인을 좀더 알아보기로 했다

 

결론적으로…

어처구니 없지만 문제는 parameter ms unsigned long 이기 때문에 발생했다

unsigned long delayTime = 60 * 1000;
void setup(){
	Serial.begin(9600);
}
void loop(){
	Serial.print(delayTime);
    delay(delayTime);
}

해보면 알겠지만 결과값이 6000 아니다

이를 바로잡기 위해선

unsigned long delayTime = 60 * 1000L;
void setup(){
	Serial.begin(9600);
}
void loop(){
	Serial.print(delayTime);
    delay(delayTime);
}

변한 부분은 unsigned long delayTime = 60 * 1000L;

1000L 로 사용해주면 된다…

 

5분단위 테스트를 해보니 적어도 하루 정도는 정상적으로 돌아가는걸 확인된다...

 

참고

https://www.arduino.cc/reference/ko/language/functions/time/delay/

https://www.arduino.cc/reference/en/language/functions/time/millis/

반응형

관련글 더보기

댓글 영역