Arduinoやマイコンを使って7セグメント表示器でメニュー番号を表示する際、メインメニューとサブメニューを連動させたい場合があります。この記事では、複数の7セグを使ったメニュー選択の連動方法と、コード上のポイントを解説します。
メインメニューとサブメニューの番号表示の基本
7セグメントディスプレイは数字を表示するために、特定のピンをオン・オフして表示します。メインメニューの番号(1~14)とサブメニューの番号(1~8)をそれぞれ別の7セグで表示する場合、各ディスプレイに対応する変数を用意して数字を格納します。
例えば、modeをメインメニュー用、selectをサブメニュー用として、それぞれの7セグに値を送ります。
スイッチ入力と変数の連動
スイッチ入力を読み取り、前回の状態と比較して変化があれば変数を更新する方法は正しいアプローチです。ただし、各if文が独立していると、メインメニューとサブメニューが連動しないことがあります。
ポイントは、変数の更新後に両方の7セグに同時に値を出力することです。例えば、modeとselectの更新が終わったら、両方の7セグを一度に更新するルーチンを呼び出します。
具体例:コードの構造改善
現在のコードは以下の通りです。
uint8_t sw=0xff;
while(1) {
sw=sw<<4 | (PINB&0xf);
if(sw&0x10 && ~sw&1) mode=(mode+1)%14;
if(sw&0x20 && ~sw&2) mode=(mode+13)%14;
if(sw&0x40 && ~sw&4) select=(select+1)%8;
if(sw&0x80 && ~sw&8) select=(select+7)%8;
_delay_ms(20);
}
修正ポイントとしては、if文のネストや関数化を検討し、modeとselectを更新した後に表示関数を呼び出すことです。例。
update7Seg(mode, select);
この関数で両方の7セグに数字を送ることで、選択番号が常に同期して表示されます。
連動表示の実装例
メインメニューで選んだ番号に応じてサブメニューの表示を変えたい場合、modeの値に応じてselectの初期値や範囲を調整します。例えば、modeが5の時はselectを1~4までに制限するなどの条件を追加できます。
これにより、ユーザーの操作に応じてメインとサブが連動した表示が可能になります。
まとめ:連動のポイント
7セグ表示でメインとサブメニューを連動させるには、
- スイッチ入力で変数を更新
- 変数更新後に7セグ表示をまとめて更新
- 必要に応じてモードに応じたサブメニュー制御
以上の手順を意識することで、連動したメニュー表示を実現できます。コードを関数化して整理することも可読性向上につながります。


コメント