2022년 1월 30일 일요일

아두이노 시계의 업그레이드 - 12시/24시 표시 방식 전환을 위한 스위치 부착

C++ 언어에 대한 지식이 백지와 다를 바가 없는 상태에서 간단한 기능의 프로그램을 짜는 것이 이렇게 힘들다니! 16x2 크기에 불과한 액정에 표시할 문자열을 다루는 것이 이렇게 복잡하리라고는 예상하지 못했다. 아주 오래전에 486 컴퓨터에 디지털 I/O 보드를 끼워서 스테핑 모터를 제어하는 C 프로그램을 짠 일은 있었다. 그 이후로는 생물학적 서열을 다루기 위해 Perl이나 shell script를 짜는 것이 전부였고, 요즘 인기 있는 프로그램인 파이썬은 남이 만든 라이브러리나 애플리케이션을 가져다가 설치하여 활용만 하는 수준에 불과하였다. C/C++에서 문자열을 다루는 것이 이렇게 어려운 일이었구나!

나의 최초 아두이노 프로젝트인 LCD 시계를 구동하는 소스 코드는 아직 개선할 점이 많다. Makuna의 Rtc 라이브러리를 가져다가 설치하고 예제 프로그램을 얼기설기 고친 것에 지나지 않는다. 12/24시간 표시를 전환하는 스위치는 누르는 즉시 반응하는 것이 아니라 시간이 업데이트되는 1초 단위로만 작동한다. 아마 버튼 스위치를 누를 때 인터럽트가 작동하도록 개선해야 될 것이다. 아두이노 우노에서는 2번과 3번 핀이 인터럽트를 담당한다고 하니 DS1302 모듈에 연결되었던 핀을 모두 옮겨야 한다.

버튼 스위치를 더 달아서 시간 수정을 가능하게 만들고, 매시 정각에 소리를 낸다거나 설정된 시각에 알람을 울리는 것도 되지 않을까? 알람 설정을 기억하려면 DS1302 RTC 모듈로는 부족할지도 모른다. 아직 이에 대해서는 자세히 알아보지 않았다. 여기에다 FM 수신 모듈까지 달아서 완전한 시계 라디오로 확장할 수도 있지 않을까? 아두이노 우노 하나가 제공하는 14개의 디지털 입출력핀이 이를 전부 감당할 수 있을런지...

아두이노에서 돌아가는 프로그램은 표준 입출력도 없고, 파일에 무엇을 기록하거나 읽는 일도 거의 일어나지 않는다. 표준 C++가 갖춘 기능 중에서 아주 작은 부분집합을 이용하는 것에 불과할 것이다. 아두이노를 유일한 활용 방안으로 생각하지 말고, 기왕 이렇게 관심을 갖게 되었으니 C/C++에 대해서 본격적인 공부를 해 보는 것도 좋을 것이다. 인터넷 강좌 중에서는 모두의 코드가 잘 알려져 있는 것 같은데, 여기에 소개된 C++ 강좌는 C를 기본적으로 알고 있는 사람을 대상으로 한다.

C++이 프로그래밍을 처음 배우는 사람에게 적합한가? 이런 질문에 대하여 "C++ is the best programming language"라는 대답을 쉽게 찾아 볼 수 있다. 그러나 내가 종사하는 생명공학 분야의 informatics를 위해서라면, 파이썬이 더 좋은 대안일 수 있다. 예를 들어 Quora에 올라온 질문과 답을 보면 많은 것을 생각하게 한다(Is C++ a good first programming language?).

단지 아두이노만을 위해서 C++을 익힌다면 어떤 경로를 택하는 것이 옳은가? 초보자가 객체지향 프로그래밍(OOP)의 개념을 처음부터 건드리다간 혼란만 겪을 가능성이 크다. 몇 가지 정해진 함수만 잘 쓰는 것으로 충분할 수도 있다. 아두이노 공식 웹사이트 포럼의 Learning C++ programming이라는 글도 한번은 읽어 보아야 한다. Question: Should I learn C++ for Arduio?의 질문과 함축적인 답변도 도움이 될 것이다. 몇 가지를 더 찾아 보았다. 그렇다! 너는 OOP에 약간의 관심이 있다. 물론 아두이노가 이를 학습할 최적의 동기를 제공한다거나, 이렇게 짜여진 프로그램을 실행할 최고의 환경은 아닐 수도 있다.

실무를 위한 프로그래밍 지식의 저변 확대를 위한 C++ 학습인가, 또는 어른을 위한 장난감 구동이라는 응용의 범위를 결코 넘어가지 않는 수준의  C++ 학습인가? 사실 후자를 위한 것이라 해도 불만은 없다. 어차피 소일 및 '치매 예방' 차원에서 시작한 일이 아니었던가? 진공관 앰프를 만들 때보다 납땜 연기를 덜 피우게 되어 건강에도 좋을 것이다.

2022년 2월 6일 업데이트 - 알람 시계 만들기

DS1302를 사용하되 4개의 택트 스위치를 써서 알람 시각을 설정하는 시계로 개조해 보고 싶다. 다음의 정보가 도움이 될 것이다.

Alarm clock with DS1302 RTC

댓글 없음: