본문 바로가기
아두이노

아두이노와 달력 - #7

by 오징어땅콩2 2020. 3. 5.
반응형

여기까지 따라 왔다고 생각하고 앞으로 계속 코딩해 나가는것이다.

C++ 초보거나 프로그램개발 기초 단계에서는 이것 까지는 오지 않는다.

점점 잘 안쓰는 문법도 나올것이다.

그런분들은 이런것도 있다 정도만 이해 하고 넘어 가기를 바란다.

문법이라는게 고급 이나 어려운 문법이 좋은것은 아니다.

평범한 문법이 좋은 코딩이다.

 

잡설은 그만 하고 계속 코딩해 나가자.

이전에 정의 하지 않은 시간, 분, 초까지 정의 하자.

정의만 하면 되는데 좀 이상한 union을 사용 했다.

이해가 안되면 그냥 무시해도 좋은 문법이다.

그냥 코딩이 하기 싫어서 넣은것 뿐이다.

for 문장을 돌리기 위해서 이다.

 

class Calendar
{
private :
  union 
  {
    int s[6];
    struct 
    {
    int year;
    int month;
    int day;
    int hour;
    int minute;
    int second;   
    };
  };
 
.....

 

그리고 비교 연산자도 만들어 넣었다.

이것이 의미하는것이 무엇일까 ?

그렇다 나는 몇시 부터 몇시까지 전등으르 켜고 싶다.

아니면 

몇시 부터 몇시까지 모터를 작동한다. 

히터를 켜다. 등의 문법이 가능해 졌다.

 

 friend bool operator > (const Calendar &l, const Calendar &r) 
  {
    for(int i = 0; i < 6; i++)
    {
      if (l.s[i]  > r.s[i]) return true;
      else if (l.s[i] < r.s[i]) return false;
    }    
    return false;
  };  
 
 
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter

 

약간의 설명을 추가 하면 

2020년 3월 1일 2시 3분과

2020년 4월 1일 2시 3분과 비교하는것이다.

4월 1일이 3월 1일 보다 크다고 표현한것이다.

 

응용능력이 빠른분들은 RTC모듈을 이용해서 전등을 특정 시간에 켜고 끄고 할 수 있을것이다.

릴레이까지 응용한다면 집에서 선풍기를 돌린다 거나 히터를 켜고 끌수 있다.

조금 더 클래스를 코딩하고 RTC를 적용해 보자.

 

 

전체 소스
#include <SoftwareSerial.h>
 
 
class Calendar
{
private :
  union 
  {
    int s[6];
    struct 
    {
    int year;
    int month;
    int day;
    int hour;
    int minute;
    int second;   
    };
  };
 
public:
  
  Calendar();
  Calendar(int y,int m, int d, int hr, int mi, int se)
  {
    year  = y;
    month = m;
    day   = d;
    hour   = hr;
    minute = mi;
    second = se;            
  }
    
  friend bool operator == (const Calendar &l, const Calendar &r) 
  {
    for(int i = 0; i < 6; i++)
    {
      if (l.s[i] != r.s[i]) return false;
    }
    return true;
  };
  
  friend bool operator > (const Calendar &l, const Calendar &r) 
  {
    for(int i = 0; i < 6; i++)
    {
      if (l.s[i]  > r.s[i]) return true;
      else if (l.s[i] < r.s[i]) return false;
    }    
    return false;
  };  
};
 
 
void setup() 
{
  Serial.begin (115200); //시리얼 프린트를 시작합니다.
  pinMode(LED_BUILTIN, OUTPUT);
}
 
void loop() 
{
  Calendar a(202031230);
  Calendar b(202041230); 
 
  if( a==b) digitalWrite(LED_BUILTIN, HIGH); 
  else digitalWrite(LED_BUILTIN, LOW); 
 
  if( a > b) Serial.println("a >b");
  else Serial.println("a <b");
  
  delay(1000);     
  
}
 
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter

'아두이노' 카테고리의 다른 글

아두이노와 달력 - #9  (0) 2020.03.05
아두이노와 달력 - #8  (0) 2020.03.05
아두이노와 달력 - #6  (0) 2020.03.05
아두이노와 달력 - #5  (0) 2020.03.05
아두이노와 달력 - #4  (0) 2020.03.05

댓글