티스토리 뷰

반응형

 


 

 

퇴근하고 7시쯤 집에 들어왔는데, 아두이노 LED가 켜져있었다. 

 

시간 계산을 잘 못 했는지 생각해봤으나 조금 애매한 타이밍이여서 '씻고 오면 꺼지겠지' 라는 생각으로 씻으러 갔다.

 

그리고 갔다 왔지만, 역시 켜져있었다.

 

 

 


 

 

 

원인은 여기저기서 사용되는 delay로 인해 분기에 들어올 때 3초정도 주기로 들어오는게 원인이였다.

 

덕분에 (s == 60)으로 분기해서 s(초)를 0으로, m(분)을 +1 하는 분기에 걸리지 않고 통과했는데,

그렇다고 이 주기에 맞춰  s에 +2~3을 하자니 펌프 가동할 때 돌아가는 delay 때문에 또 틀어질 것 같았다.

 

결국 분기에 들어올 때 60초 이상이면 s는 -60을 하고 m은 +1하는 로직을 작성했다.

 

이런 저런 방법을 생각하고, 시도했지만 결국 처음 생각했었고 가장 최후의 수단인 방법으로 했다. (불-만)

 

처음 시작할 때 현재 시간을 하드코딩한 h, m, s 변수와 아두이노 작동 후 기기가 카운팅하고 있는 타이머 시간(ss)을 각자 포맷에 맞게 변환해서 가지고 있는 hh, mm 변수를 작성했다. 

 

그 후 h+hh, m+mm을 LCD에 출력하도록 했더니 잘 동작했다. m(분)만.

 

 

 


 

 

 

보아하니, m+mm이 60을 초과했을 때 h+hh에 +1을 해줘야되는데, 그걸 안하고 있었다.

 

그래서 최종적으로 시에 적용된 로직은 (h + hh + (m +mm)/60) % 24 이랬다. 아닌가?

 

m+mm이 60 이상일 때 +1 되고, 그렇게 다 더해진 시간(h+hh+n)을 24로 나눴을 때 나오는 나머지 값으로 0~24시간을 나타내게 했다.

 

그리고 결국 다음날 아침에 일어났을 때 타이머가 정상 동작하는 걸 확인했다. 퇴근 후에도 잘 돌고 있으면 좋겠는데..

 

 

ㅎㅎ 어림도 없지

반응형