とりあえず「サブルーチン」という概念を棄てるところから始まるわけだな。
全ては関数。関数型を定義して、その中で引数も定義する。
だからAD9851をドライブするのも関数。戻り値は無し。
引数をf+IFで渡す、f±Δf+IFで渡す、fそのもので渡す、の三種類のケースがあるわけだけど、それぞれを計算して引数にして関数を呼び出せばよい。
f(AD9851)を先に引用したコードで作成してI2CのLCD表示関数を絡め、DigitaiIN入力端子を決めてボタン押したかどうかを見る関数を加える。
f(ボタン1){
f(freq_up)
f(I2C_LCD)
f(f+IF)
f(AD9851)
return()
}
f(ボタン2){
f(freq_down)
f(IC2_LCD)
f(f+IF)
f(AD9851)
return()
}
f(ボタン3){
f(freq_)
f(I2C_LCD)
f(AD9851)
returrn()
}
//* もしf(ボタン3)が押されたままなら離されるのを待つ *//
//* あるいはf(ボタン4)でボタンが押されるのを待つ *//
先頭に戻る
fデータはunsigned intを使い、初期値は7040000。IFシフトもubsigned intで455000。分解能は0.04Hzなので刻み値25で1Hz変わる。周波数の変数を25倍すればAD9851に送る数になるはず。IchigoJamの場合、signed int(15bits)でややこしかったけど。32bitsカウンタが使えればうんと楽になるはず。455000*25を加えるかどうかだ。
だいたい形が見えてきた。
全ては関数。関数型を定義して、その中で引数も定義する。
だからAD9851をドライブするのも関数。戻り値は無し。
引数をf+IFで渡す、f±Δf+IFで渡す、fそのもので渡す、の三種類のケースがあるわけだけど、それぞれを計算して引数にして関数を呼び出せばよい。
f(AD9851)を先に引用したコードで作成してI2CのLCD表示関数を絡め、DigitaiIN入力端子を決めてボタン押したかどうかを見る関数を加える。
f(ボタン1){
f(freq_up)
f(I2C_LCD)
f(f+IF)
f(AD9851)
return()
}
f(ボタン2){
f(freq_down)
f(IC2_LCD)
f(f+IF)
f(AD9851)
return()
}
f(ボタン3){
f(freq_)
f(I2C_LCD)
f(AD9851)
returrn()
}
//* もしf(ボタン3)が押されたままなら離されるのを待つ *//
//* あるいはf(ボタン4)でボタンが押されるのを待つ *//
先頭に戻る
fデータはunsigned intを使い、初期値は7040000。IFシフトもubsigned intで455000。分解能は0.04Hzなので刻み値25で1Hz変わる。周波数の変数を25倍すればAD9851に送る数になるはず。IchigoJamの場合、signed int(15bits)でややこしかったけど。32bitsカウンタが使えればうんと楽になるはず。455000*25を加えるかどうかだ。
だいたい形が見えてきた。