今回は、Raspberry Pi(ラズパイ)で電波時計を合わせるためのプログラム「waveclock.c」を紹介していきましょう。40kHzの発振はすでに成功しているので、基本はその延長です。プログラムの先頭から順にリストを掲載します(本記事で登場する全ソースコードはここからダウンロードできます)。

 図5に示したgen_pulse()関数は、引数で指定したミリ秒だけ40kHzの信号を出す関数です。ループ1周で約24μ秒のパルス、つまりGPIOのオンオフを出すので、指定されたミリ秒に40を掛けた回数だけループを回しています。

図5●waveclock.cのgen_pulse()関数
図5●waveclock.cのgen_pulse()関数
[画像のクリックで拡大表示]

 例えば、gen_pulse(200);と呼び出すと、200ミリ秒の間、40kHzの信号を発生させます。

 図6に示したtransmit_timecode()は、引数に指定した整数配列の内容に従って電波時計のタイムコードを送信します。

図6●waveclock.cのtransmit_timecode()関数
図6●waveclock.cのtransmit_timecode()関数
[画像のクリックで拡大表示]