バグ発見2(Arduinoで電波時計を作る その9) | かっぱのひとりごと

かっぱのひとりごと

日々の思いをつぶやいています。

バグ、2つ発見しました。
一つ目は変数の定義間違い。
byte d_day[2];

int d_day[2];
が正しいです。

9月13日に表示が1月0日と表示されたのは、このバグのせいです。
積算日で送られてくる信号が 256日になったために1バイトを超えてしまい、積算日が 0日となってしまいました。


二つ目は4年に一度しか起こらないバグです。

送られてきた信号のデコード時にうるう年の処理を入れ忘れておりました。
日付が切り替わるときは処理してたんですが・・・。

変数定義の
const byte month_day[] から const を削除。

日付と月のデコードを年が決まってからに変更。うるう年の処理を追加。


// 年の算出
c_year = 0;
for (i = 0; i < 9; i++){
c_year = c_year << 1;
c_year += get_code();
}
d_year[no] = (c_year >> 4) * 10 + (c_year & B1111);
code = get_code(); // ポジションマーカー


d_month[no] = 0;
do{
d_day[no] -= month_day[d_month[no]];
d_month[no]++;
//----- ここにうるう年の処理を追加 -----
if (d_month[no] == 2 && (d_year[no] % 4 == 0)){
month_day[2] = 29;
} else {
month_day[2] = 28;
}
//--------------------------------------
} while( d_day[no] > month_day[d_month[no]]);


Google Drive にスケッチをアップしました。
ソースはこちら。「Radio_Clock_bugfix2.zip」
「電波時計」を選んで「Radio_Clock_bugfix2.zip」をクリック。
上の矢印をクリックするとダウンロードできます