「さん、ハイッ」ペダル4
「さん、ハイッ」ペダル4
状態遷移図を描いてみた。掲示板に挙げていたものをこちらにも掲載する。→ 大きな図面
用語の説明
- IDLE
- 初期状態
- TRANS3
- 状態THREEへの遷移途中状態
- THREE
- 3拍目が確定している状態
- TRANS4
- 状態FOUR1への遷移途中状態
- FOUR1
- 4拍目の前半部分の状態
- FOUR2
- 4拍目の後半部分の状態。F8を出力している。
- STABLE
- F8を1拍あたり24回出力している定常状態。
動作の説明
- 電源投入で初期状態に
- ペダルが踏まれる(3拍目想定) timer0 と timer1 を0からスタート*1
- timer0 で割り込まれたときに
- まだ踏まれている→3拍目を受信して状態THREEへ
- 踏まれていない→ノイズとみなし初期状態へ
- timer1がフルカウントして割り込まれる=4拍目が来ないでタイムアウト→初期状態へ
- ペダルが踏まれる(時間内に4拍目がきたのかも)。timer0 を0からスタート。timer1 の値を beat_timeに記憶
- timer0 で割り込まれたときに
- まだ踏まれている→確かに4拍目として、timer1を (65536-beat_time/2) にセットしてスタート*2して、状態FOUR1へ
- timer0 で割り込まれたときに踏まれていない→ノイズとみなし初期状態へ
- beat_time/2 で割り込みがかかった時点で 6 の遷移が起こる。それまでに beat_time/24 の演算がメインルーチンで完了しているはずなので、この値で割り込まれるようにtimer1をセット*3し、割り込みの回数を12個数えている。
- 最後でFAを出力し → 状態 STABLEへ遷移
- STABLE状態にあっても、ペダルが踏まれると TRANS3 へ遷移して、全体の状態遷移を繰り返す。
*1:0からスタートすると、timer0はカウントアップして255を超えて再び0になったときに、timer1 は 65535 を超えて再び0になったときに割り込みがかかる。
*2:beat_time/2 だけカウントするとtimer1割り込みがかかる。
*3:65536 - beat_time/24