sidetech

(元)インフラエンジニアの寄り道メモ。

ArduinoのLEDコントロール序盤まとめ

少々多めのブログ投稿となっておりますが、6月からまた休日がノンビリできるか微妙なのと、上海に出張に行かねばならないので、出せるだけ出しておきます[E:coldsweats01]

 
さて、Arduinoを始めてから、まだLEDと抵抗とタクトスイッチとCdSセルしか出てきていませんが、ここまででとりあえず纏めておきます。
プログラミング的な話は一切していませんが・・・基本的には・・・
const int //読み出しオンリーの整数型変数の宣言
int //整数型変数の宣言
if - else  //もし何ならば、そうでなければ
for  //条件ループ
delay //遅延処理(ms)
pinMode //I/O制御でインプットにするかアウトプットにするか
analogRead //アナログ信号を読む
digitalRead //ディジタル信号を読む
digitalWrite //ディジタル品号を書く
命令としてはこんなところですかね・・・。ぶっちゃけC言語の初級やってないとArduinoもすぐにできないよね。でもプログラムは反復でも覚えて行けます。
 
Arduinoled601
てことで簡単に応用して、LEDを賑やかにしてみました。ボタンを押すと全消灯、全灯を繰り返します。個数は増えましたが、やっていることはあまり変わってません。
 
Arduinoled602
写真では収めることが出来い動きのあるものなのですが、ボタン機能を使っていませんが、6個のLEDが順番に光るプログラムを作ってみました。ナイトライダーみたいな感じにLEDが光ります。
 
Arduinoled603
従来のプログラムにfor分で順番に光らせているだけです。for分の中にdelayを入れるともっとよく分かるのですが、6個のLEDの全点灯をするには同時に光っている様に見えて順番に光って順番に消えています。
ここで気が付かねばならないことは、delay処理によってプログラムが「待ち」に入り、その他の処理が出来なくなっている事です。出来ればその待ち時間に他の処理したいですよね。
delay値を大きくしていけばわかりますが、ボタンの割り込みをしたいのに、点灯過程でdelayを使ってしまうと、ボタンを押した時にもしかしたら、LEDの点灯が終わっていないかもしれません。そうするとボタンを押した情報は無視されてしまいます。
これをなんとかしていきたいですよね。そのうちなんとかしましょう[E:happy02]
一応、Arduinoが主役ってことで?プログラミング要素は後回しにして、電子的な部分の勉強を先行させます。なんといっても私の自己満ですから[E:happy02]
 
あと、今回の6個のLED点灯ですが、プログラミングを頑張ると、例えばボタンを押すたびにLEDの点灯を二番目、三番目と光らせて行くことも可能です。これはプログラミング次第で表現方法が変えられることを言っています。
 
ただ、今回、6個のデジタルアウトプットと1個のデジタルインプットを消費してしまいました。I/Oのポートには限りが有ります。このままのノリでLEDをつけていったら限界がすぐに来てしまいます。7セグメントLEDも1個で精一杯になっちゃいますね。
これこそなんとかしなくてはナランです。
それと、なにげにアナログの機能を使ってきましたが、アナログの値ってどうなっているんでしょうかね。そろそろ、変数の値の変化も見ながらやっていきたいですね。
 
まだまだ目標物の完成まで遠いですが、がんばっていきまっす。