반응형
앞에서 여러번 언급해서 내용을 알고 있을것 같다.
오늘 마지막으로 하는것은
현재시간에서 1년 2달 3일 4시간 5분 6초 후를 계산 할 것이다.
현재 시간이 변하고 있기 때문에 값도 바뀌게 되겠지만,
고정된 시간으로 계산해도 무방 하다.
예를 들어
100일 이후를 계산한다 던지
7800초 이후라는 수식도 가능 하다..
조금, 설명을 더하면,
현재 시간이 cdt, 계산된 시간을 todt라고 변수를 정의 했다.
소스코드는 간단하니 어려울것은 없을것이다.
void loop()
{
get3231Date();
Calendar cdt(2000+year, month, date, hours, minutes, seconds);
Calendar todt = cdt + Calendar(1, 2, 3, 4, 5, 6);
Serial.print("-------");
Serial.println();
delay(1000);
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
|
이것이 가능하게 만든 + 연산자의 정의를 참고 하자.
크게 어려운것은 없다. 그냥 날짜의 정의에 충실한것 뿐이다.
Calendar operator+ (const Calendar &r)
{
int y,m,d, hr, mi, se;
int months[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
hr = hour;
mi = minute;
se = second;
d = day;
m = month;
y = year;
if(((y% 4 == 0) && (y % 100 != 0)) || (y % 400 == 0)) months[2]=29;
se += r.second;
while(se >= 60)
{
se -= 60;
mi += 1;
}
mi += r.minute;
while(mi >= 60)
{
mi -= 60;
hr += 1;
}
hr += r.hour;
while(hr >= 24)
{
hr -= 24;
d += 1;
}
d += r.day;
while(d > months[m])
{
d -= months[m];
m++;
if(m >12)
{
m = 1;
y += 1;
if(((y% 4 == 0) && (y % 100 != 0)) || (y % 400 == 0)) months[2]=29;
else months[2]=28;
}
}
m += r.month;
while(m > 12)
{
m -=12;
y++;
}
y += r.year;
if(((y% 4 == 0) && (y % 100 != 0)) || (y % 400 == 0)) months[2]=29;
else months[2]=28;
if(d > months[m]) d = months[m];
return Calendar(y,m,d, hr, mi, se);
};
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
|
'아두이노' 카테고리의 다른 글
아두이노와 7세그먼트(잡담) (0) | 2020.03.29 |
---|---|
아두이노와 달력 - #최종 (0) | 2020.03.07 |
아두이노와 달력 - #12 (0) | 2020.03.07 |
아두이노와 달력 - #11 (0) | 2020.03.07 |
아두이노와 달력 - #10 (0) | 2020.03.05 |
댓글