2012年8月27日月曜日

1桁の7セグメント発光ダイオードで表示(スケッチ完成編)

いよいよ、Arduinoを使用して1桁の7セグメント発光ダイオード(7セグLED)のスケッチの完成版です。


配線図と7セグLEDのおさらいです。

配線図












前回の最後での課題は、各数字を表示する際に、それぞれ別な関数名を使用している為、スケッチが長くなってしまっていたことです。もっと、賢い書き方を目指します。

このスケッチが最終版です。

void setup(){
  //1~7番ピン デジタル出力へセット
  for (int i=1; i<=7; i++){
    pinMode(i,OUTPUT);
  }
}
//LEDレイアウトを定義
boolean Num_Array[10][7]={
  {0,0,0,0,0,0,1},{1,1,0,0,1,1,1},{0,0,1,0,0,1,0},{1,0,0,0,0,1,0},
  {1,1,0,0,1,0,0},{1,0,0,1,0,0,0},{0,0,0,1,0,0,0},{1,1,0,0,0,0,1},
  {0,0,0,0,0,0,0},{1,0,0,0,0,0,0}
};
//LED表示関数を定義
void NumPrint(int Number){
  for (int w=0; w<=7; w++){
  digitalWrite(w+1,Num_Array[Number][w]);
  }
}

void loop(){
  for(int t=0;t<=9;t++){
  NumPrint(t);
  delay(500);
  }
}

関数名は、NumPrintという名前です。引数として、表示したい数値をします。
作成した関数の構文は、下記のとおりです。
  NumPrint(数値)

作成した関数の解説です。

まず、今回理解する必要があるのが、2次元配列です。
//LEDレイアウト定義 の次の行から、見てください。
NumArrayという変数の内容として、[10][7]=・・・・ という指定の仕方をしています。

これは、横10個×縦7個の変数の箱を用意するイメージです。
各数字のLEDを表示するレイアウトを取り出す際には、縦方向で、どの数字なのか、そして、その数字のレイアウト情報を横方向に読み込んでいきます。

引数を伴った関数の場合、呼び出し側で指定した引数は、関数の定義内では、( )の中の変数として渡されます。

今回の場合だと、数値1を引数と渡しているので、関数側ではNumberという変数に1がセットされます。
このNumberを使用して、配列の縦方向を指定しています。縦方向が決まれば、横方向は、配列番号0番から6番までを順に読み込み、点灯と消灯を決定することで、すべての数値の表示を一つの関数で実現しています。

結果的には、膨大に大きかったスケッチが、12行で実現できたことになり、大幅に読みやすくすることができました。


0 件のコメント:

コメントを投稿