본문 바로가기

분류 전체보기215

아두이노와 달력 - #12 이제 마지막으로 할 것은 특정 날짜에 특정 시간을 더하고 뺴고 할 것이다. 그런데 이것은 꼭 논리적이지는 않다. 예를 들어 2020년 3월 1일 1시 00분 00초로 부터 24시간 이후 라면 명확한 시간이 계산된다. 2020년 3월 2일 1시 00분 00초 이다. 그러면 한가지 더 예를 들어 보자. 2020년 2월 29일 1시 00분 00초로 부터 1년 이후 라면 어떻게 할 것인가 ? 2021년 2월 29일 1시 00분 00초라고 해야 하나 ? 아니면 2021년 2월 28일 1시 00분 00초라고 해야 하나 ? 2021년 3월 01일 1시 00분 00초라고 해야 하나 ? 이것은 수학적인 논리의 영역이 아니라 인간의 판단의 영역이다. 물론 이것을 처리하지 않으면 버그로 시스템이 다운 될수도 있다. 왜냐하면.. 2020. 3. 7.
아두이노와 달력 - #11 거의 종착역으로 가고 있으니 여기까지 이해 하셨다면, 조금만 더 공부 하면 될것 같다. 오늘은 거의 공짜라고 봐도 된다. 할까 말까 고민 하다가 하는것이기 떄문에 아주 쉽다. 저번에 특정 날짜 부터 특정 날짜까지 작동하는것을 했었다. 오늘은 그것 보다 더 쉬운 매일 아침에 몇시 부터 몇시까지 작동하는것을 할 것이다. 일단 소스코드를 보자. 년,월,일을 없애 버렸다. 다르게 표현하면 같은 날짜로 만들어 버렸다. 그 같은 날짜가 꼭 오늘일 필요는 없다. 어쨰던 작동한다. 마치 매트릭스에 사는 인간이 진실을 모르는것 처럼 아두이노 입장에서는 년,월,일은 필요 없는것이다. 그냥 매일 같은 시간에 반복하기 때문에 없는것과 같다. 약간의 설명을 추가하면 매일 오전 7시 부터 7시 10분까지 작동하는코드 이다. vo.. 2020. 3. 7.
폴더 생성하고 파일 만들기 요즘핫하다는 파이썬이다. 가끔 필요한 폴더 만들고 파일 기록하는것이다. # writedata.py import os lpath = './bbb/' fpath = lpath + 'newfile.txt' ischeck = os.path.isdir(lpath) if (ischeck==False) : os.mkdir(lpath) f = open(fpath, 'w', encoding='utf-8') for i in range(1, 11): data = "%02d번째 줄입니다.\n" % i f.write(data) f.close() http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by C.. 2020. 3. 6.
아두이노와 달력 - #10 사실 많이 있지만, 할 것은 많이 남지 않았다. 여기 까지 따라 왔다면 힘내기 바란다. 앞으로 해야 할 것에 대한 이야기다. 날짜 + 날짜, 날짜 -날짜에 대한 이야기다. 우리는 특정 날짜 시간 + 30분후, 혹은 5분전이라는 표현을 간혹 사용한다. 그러면 날짜에 +30하면 될까 ? 혹은 날짜 -5 하면 될까 ? 물론 안된다. 사람은 논리적으로 이해 하지만 날짜에 대한 사칙연산은 정의 되어 있지 않다. 그렇다 날짜에 대한 사칙연산을 적용해야 할 떄가 온것이다. 곰곰히 생각해 보고 한번 만들어 보기 바란다. 그리고, 이전코드의 전체 코드 이다. #include #include #define DS3231_I2C_ADDRESS 104 // 데이터핀 연결 // SCL - pin A5 // SDA - pin A4.. 2020. 3. 5.
아두이노와 달력 - #9 소프트웨어 코딩만 하면 지루 할 것 같아서 RTC모듈을 넣었다. RTC모듈에서 날짜를 가져 오는것은 하지 않을것이다. 검색만해도 널려 있는게 코딩 소스 이다. 일단 날짜를 가져 와서 몇일 부터 몇일까지 LED를 작동시키는 코드를 만들것 이다. 이전에 봤던 ==. && === && == && == 의 지저분한 코드는 앞으로 버리기 바란다. 코딩은 간단 명료하게 다른 사람들이 척 보면 이해 되게 만들기 바란다. 추가로 설명을 하면, sdt는 시작 날짜, edt는 끝 날짜, cdt는 현재날짜 시간이다. cdt가 시작날짜와 끝날짜 사이에 있으면 LED를 ON 하라는 명령어 이다. void setup() { Wire.begin(); Serial.begin(115200); pinMode(LED_BUILTIN, OU.. 2020. 3. 5.
아두이노와 달력 - #8 여기까지 왔다면 약간 중간까지 온것이다. 여기서 한가지 철학을 이해 하고 넘어 가야 한다. C++ 이나 아두이노의 철학은 대부분의 프로그래머들이 클래스를 만드는것에 있지 않다. 그냥 사용법만 알면 충분하다. 클래스 내부문법에는 관심이 없다. 그냥 사용만 하면 되는것이다. 그다음 클래스 내부를 이해 하는것이다. 이전에도 이야기 했지만 모든것을 이해 할라고 하면 안된다. 그냥 메인 loopr과 setup 정도만 이해 하면 된다. ps. 아래 내용이 이해가지 않는다면 댓글로 질문 하기 바랍니다. void setup() { Serial.begin (115200); //시리얼 프린트를 시작합니다. pinMode(LED_BUILTIN, OUTPUT); } void loop() { Calendar a(2020, 3,.. 2020. 3. 5.
아두이노와 달력 - #7 여기까지 따라 왔다고 생각하고 앞으로 계속 코딩해 나가는것이다. C++ 초보거나 프로그램개발 기초 단계에서는 이것 까지는 오지 않는다. 점점 잘 안쓰는 문법도 나올것이다. 그런분들은 이런것도 있다 정도만 이해 하고 넘어 가기를 바란다. 문법이라는게 고급 이나 어려운 문법이 좋은것은 아니다. 평범한 문법이 좋은 코딩이다. 잡설은 그만 하고 계속 코딩해 나가자. 이전에 정의 하지 않은 시간, 분, 초까지 정의 하자. 정의만 하면 되는데 좀 이상한 union을 사용 했다. 이해가 안되면 그냥 무시해도 좋은 문법이다. 그냥 코딩이 하기 싫어서 넣은것 뿐이다. for 문장을 돌리기 위해서 이다. class Calendar { private : union { int s[6]; struct { int year; in.. 2020. 3. 5.
아두이노와 달력 - #6 우리는 앞으로 날짜, 달력 클래스를 만들것이다. 연산자 오버로딩 하나로 어려워 하면 안된다. 만약 어렵다면 C++을 다시 한번 공부하기를 추천 한다. 우리는 앞으로 만들어야 할 것이 더 많다. 날짜, 달력에는 년,월,일 만 있는것은 아니다. 시간, 분, 초도 있다. == 연산자만 있는것이 아니다. 비교 연산자도 있다. 날짜는 비교 하고 싶지 않은가 ? 물론 원하지 않는다면 필요 없을 수도 있다. 아래 코딩은 완전한 코딩은 아니고 몇가지 비워 두었다.. 연습삼아 완성해 보는것도 좋을것이다. #include class Calendar { private : int year; int month; int day; public: Calendar(); Calendar(int y,int m, int d) { year .. 2020. 3. 5.
아두이노와 달력 - #5 자 앞에서 없다고 했다. 그러면 하나씩 만들어 주자. 날짜 a; 날짜 b; if (a==b) digitalWrite(LED_BUILTIN, HIGH); else digitalWrite(LED_BUILTIN, LOW); 위와 같이 코딩 했을떄 과연 될까 ? 뮬론 안된다. == 과 같은 동등 연산자는 숫자에서만 가능 하다. 날짜는 숫자가 아니다. 그래서 안된다. 안되면 되게 하는 방법을 무엇일까 ? 그렇다 연산자에서 의미를 부여 하면 된다. 이것이 C++의 대단한 기능중의 하나인 연산자 오버로딩이다. 연산자에 의미를 부여 하는것이다. 그리고 날짜 클래스 타입도 만들어야 한다. 이전에서 이야기 했지만, 어렵다면 loop 메인 함수만 보기 바란다. #include class Calendar { private :.. 2020. 3. 5.