본문 바로가기

분류 전체보기210

아두이노와 달력 - #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.
아두이노와 달력 - #4 알반적으로 컴퓨터의 경우는 CMOS가 가지는 시계 모듈도 있고, 네트웍 시계도 있고, 기타 등등 여러가지의 시계가 있다. 그래서 이래 와 같은 코딩이 가능 하다. 그러나 아두이노의 경우는 시계가 없다. 시계 모듈을 이용해서 시계를 추가 하지 않는 이상 시계는 없다. 그러나 타이머를 이용한 시간을 계산 할 수는 있다. 그래서 우리 흔하게 사용하는 타이머를 계산 할 수가 있는것이다. "뭐가 없다는것은.." 무엇일까 ? 그것과 관련한 함수가 없다는것이다. 쉽게 말해서 본인이 다 만들어야 하는것이다. unsigned long currentMillis = millis(); #include #include #include #include int get_time(); int main(int argc, char** a.. 2020. 3. 5.
아두이노와 달력 - #3 앞에것을 보았다면 기본적인 상식 차원의 내용은 이해 했을것이다. 그러면 컴퓨터는 어떻게 달력을 계산하는지 알아 보자. 사실 요것도 공부하다 보면 할것이 많다. C언어세서의 time_t와 time 함수를 이해 해야한다. 1900년 부터 몇 초나 지났는지에 대한 값이다. 간혹 1900년하고 1970년이라고 하는데 지금은 1900년 인것 같다 왜 1900년 하고 1970넌 일까 ? 생각하면 이전의 달력은 1년이 꼭 12달도 아니고, 들쑥 날쑥해서 어차피 계산해도 맞지 않다. #include #include int main () { time_t time; time (&time); printf("1900년 부터 몇 초나 지났나 : %d 초 \n", time); return 0; } http://colorscrip.. 2020. 3. 5.
아두이노와 달력 - #2 아래를 보면 아시겠지만, 그 계산법이 무색해 진다. 로마 왕들이 지들 마음데로 1년을 12달로 바꾼것도 있고, 30일을 31일로 바꾼것도 있다. 달력의 기원 지금으로부터 2000여 년 전의 로마 사람들도 처음에는 태음력을 쓰고 있었습니다. 로마의 달력은 1년이 355일로 되어 있었으므로 매년 10일이나 차이가 났고 어느 해에 가서는 가을에 있어야 할 추수 감사절이 여름에 있게 되기도 하여 여간 불편한 것이 아니었습니다. 로마의 왕 쥴리어스 시이저는 이제까지의 달력을 폐지하고 이집트와 같은 태양력을 쓰기로 결정하고는 1년을 365일로 하였으나, 사실 지구가 태양을 한바퀴 도는 시간은 정확히 365가 아니고 365일 5시간 48분 46초였으므로 역시 4년 정도가 지나면 하루 정도의 시간 차이가 생기고 이것이.. 2020. 3. 1.
아두이노와 달력 - #1 아두이노 이전에 프로그래밍을 다루다 보면 달력, 날짜를 종종 연산해야 하는 경우가 발생 한다. 사실 본인이 대학교 1학년때 최초로 만들어본 C 프로그램이 달력 프로그램이다. 나도 그때 까지는 몰랐다. 관심도 없었다. 1년이 366일이 있다는 사실을... 1년은 그냥 365일인줄. 그떄 도서관에서 찾은 자료에 의하면 4년에 한번씩 윤년이 와서 366일이 되고, 100년에 한번씩 빼고 400년에 한번씩 다시 윤년된다. 여기 까지는 극히 그냥 상식적인 내용이다. 그러면 처음의 시작은 0년 1월 1일 일까 ? 아니면 1년 1월 1일 일까 ? 그요일은 무슨 요일 일까 ? 월요일 일까 ? 일요일 일까 ? 이런 궁금증이 있었다. 그래서 프로그램으로 다시 계산해 봤다. 역으로 환산하면 충분히 계산 할 수가 있다. 그때.. 2020. 3. 1.
아두이노 Serial MP3 모듈 -#4 이전에 했던 두개를 합쳤다. 소스상의 정리도 조금 했지만 큰차이는 없으니 소스코드만 봐도 이해가 가능 할것 같다. 그리고 이전에 했던 시리얼 입력 함수는 주석 처리 했지만 쉽게 다시 원상 복귀 할 수가 있다. 항상 그렇지만 나무를 볼라고 하지 말고 숲이다. 메인 함수, loop만 열심히 보면 된다. 다음에 기회되면 코딩에 대한 철학도 이야기 하고 싶다. //code rearranged by Javier Muñoz 10/11/2016 ask me at javimusama@hotmail.com #include #define ARDUINO_RX 2//should connect to TX of the Serial MP3 Player module #define ARDUINO_TX 3//connect to RX o.. 2020. 2. 23.