ソフトウェア改修して一応の完成…ですかね。
時刻表示モード
年月日表示モード
内部温度表示モード
バイナリ表示部分は常時時刻表示を行なっています。
時刻をsetSyncProvider()により定期的にRTCから読み出し、通常はシステム時間を見て時刻表示していたのですが、あれこれ試しても同期がずれるため本来の計時をしているRTCからの読み出しを行なって表示するように変更。
どうしても表示がちゃんとならなかった温度表示も正常に表示できるようになったので、これで完成としました。
ちなみに温度はRTCのDS3231の内部温度センサーの値を読みだして摂氏換算した数値を表示させています。解像度は0.25℃ですので小数点以下は不要かもしれませんね。
追加予定機能として明るさセンサーを付け、暗くなると表示の輝度を落とす機能を予定していますが実装はいつになるのやら…。センサーもレガシーなCdSにするか、最近のトレンド的なフォトダイオードとアンプを組み合わせた照度センサーにするかは迷い中。
雑で冗長なソフトですが誰かの参考になればと考えスケッチを公開します。
回路図は掲載しませんが、ECADへ入力するのが面倒くさいだけで回路は至極基本的な構成ですので実回路についてはご想像ください。
構想開始して一度製作を行い途中放置してから10年以上経過してやっと完成しました。表示周りが16×8のマトリクスLEDを駆動できるHT16K33に感謝です。ダイナミック点灯させて輝度変更まで対応しようとするとMPU側がかなり面倒くさい事になっていたでしょうし回路規模ももっと複雑になっていたはずです(実際前回はI/Oのピン数を減らすためにデコーダーなどを実装していました)。
参考スケッチ(右クリックで保存してください)
BinaryClock2.ino
表示モードを保持するグローバル変数のdmodeはloop()の中に置いて表示関数に引き渡すようにすればローカル変数に変更できます。
・バイナリクロック(その1)
・バイナリクロック(その2)
・バイナリクロック(その3)
・バイナリクロック(その4)
・バイナリクロック(その5)
・バイナリクロック(その6)
・バイナリクロック(その7)
・バイナリクロック(その8)
・バイナリクロック(その9)
・バイナリクロック(その10)
・バイナリクロック(その11)この記事