配線図と7セグLEDのおさらいです。
配線図 |
前回の最後での課題は、各数字を表示する際に、それぞれ別な関数名を使用している為、スケッチが長くなってしまっていたことです。もっと、賢い書き方を目指します。
このスケッチが最終版です。
void setup(){
//1~7番ピン デジタル出力へセット
for (int i=1; i<=7; i++){
pinMode(i,OUTPUT);
}
}
//LEDレイアウトを定義
//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);
}
}
{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 件のコメント:
コメントを投稿