こんにちは、営業のショーです。
この記事は続きものなので、まずはコチラからご覧下さい。
Arduinoを使ってプログラミングをしてみよう~準備編~
では、解説していきますブー。
☆プログラムの説明と、解説☆
このプログラムは、
・センサー活用入門の各種センサーを動かして、
・その値をArduinoが読み取って、
・LED表示制御入門のLEDに反映させるというものです。
それぞれの動きに関しては付属のマニュアルを読むと
全部分かりますので割愛します。
商品詳細ページからマニュアルをダウンロードできますので、
是非ご覧下さいね。
・LED表示制御入門(SU-1202)
・センサー活用入門(SU-1203)
・モーター・リレー・ブザー制御入門(SU-1204)
この記事では、マニュアルに載ってない少し特殊な命令について解説をしていきます。
■割り込みライブラリの読み込み
#include <MsTimer2.h>
#includeというと、C言語ではstdio.hが有名かなと思います。
呪文だなんだと言われますが、これは追加ファイルの読み込みをするための命令です。
今回は7セグLEDの割り込みに使用する、MsTimer2のプログラムを読み込ませています。
■7セグ表示部分の命令文
#define num0 digitalWrite(2,HIGH);digitalWrite(3,HIGH);
digitalWrite(4,HIGH);digitalWrite(5,HIGH);digitalWrite(6,HIGH);
digitalWrite(7,LOW);digitalWrite(8,HIGH);
以下同じようなのがずらっと……
#defineは置き換えの命令です。プログラムのコード内にnum0と入力すると、
ArduinoはdigitalWrite(2,HIGH);digitalWrite(3,HIGH);………………
と置き換えて認識します。
7セグLEDの点灯命令についてはLED表示制御入門に付属しているマニュアルのp25以降、
#defineの解説はp28●コラム5をご参照ください。
■変数宣言
byte count = 0; //カウンターの記憶用
int valSW; //タクトスイッチ
byte や int によって宣言をしています。
byteというのは符号なしのデータ型と呼ばれるもので、0から255までの値を格納できます。
符号なし=つまり負の数は格納できません。
intというのは整数型と呼ばれるもので、Arduino上では2バイト、つまり-32768から32767までの値を格納できます。
byteで処理しているところは、7セグLEDのカウンターの記憶用、つまり99までの数しか格納されないところと、
7セグLEDの各1桁、つまり0~9の数しか格納されないところです。
小規模なプログラムではあまり気にせずintで全て処理してもいいですが、
何となくbyteにしてみました。
■割り込み命令
MsTimer2::set(3, visi); MsTimer2::start();
いずれもMsTimer2を使う際に使用します。
set()の引数で、何msおきに割り込むか、どの関数を呼び出すのかを指定。
start()はMsTimer2を実行するための命令です。
■条件分岐 if とswitch
if文については、いくらでも解説が出てくるので割愛します☆
今回解説するのは、switchについて。
これは、switch()の引数に設定した変数の値がどうなっているか・・・で命令が分岐する命令です。
7セグの各位の値が0だったら・・・1だったら・・・2だったら・・・という条件ごとに命令を書いています。
ここで活躍するのが、最初に宣言している#defineですね。
switch(ten){
case 0:num0;break;
変数tenの中身が0だったら。num0を実行する。という命令です。
今回はswitchを利用して、7セグLEDの光り方を10パターンに分岐させるために使用してみました。
tenが0だったら、1だったら、2だったら、3だったら・・・とそれぞれnum0、num1、num2、num3を実行という形ですね。
さて、ずらずらーっと解説をしてみましたが、いかがだったでしょうか。
実は僕もプログラミング暦2年ほどの初心者なので間違いが色々あるかと思いますが・・・その際はコメント等で指摘していただけると大変喜びます。
みなさんもArduino活用入門シリーズで、ぜひプログラミングを始めてみてくださいね!