4個並べて1個づつLチカ【マイコンLチカ道場 Arduino編 0-3】
目次- はじめに
- 回路図と接続図
- プログラムを書いてみる
- まとめ
はじめに
このページは「マイコンLチカ道場 Arduino編」の「0-3:4個並べて1個づつLチカ」に対応するページです。Lチカの複数点滅をさらに応用して動作させてみます。今回は、for文を使ったプログラムでも動作させてみました。
マイコン Lチカ道場 Arduino編Lチカとは、LEDをチカチカと点滅させる処理のことです。マイコンを動かしてみるときに皆さんが最初に試してみるプログラムですね。単純なのでバカにされがちですが、LEDをトランジスタのスイッチに変えたり、ブザーにかえたりなど、すべての動作の基本になる物ではないでしょうか。nobulabo.com2023.03.06 2個交互にLチカさせてみる【マイコンLチカ道場 Arduino編 0-2】このページは「マイコンLチカ道場 Arduino編」の「0-2:2個交互にLチカ」に対応するページです。一番簡単なLチカを少し応用して動作させてみます。また、const intでピン番号の定義を行ってみました。nobulabo.com2020.10.27 スポンサーリンク回路図と接続図
今回はさらにLEDを10番、9番ピンに2個追加して合計4個にしました。手持ちの赤色LEDは暗かったので、全部青色LEDとしました。電流制限抵抗は220Ωです。
回路図 ブレッドボード接続イメージ スポンサーリンクプログラムを書いてみる
早速プログラムを書いてみました。前回と同じノリで出力ピン数を増やしていくだけで、簡単に動作させることができました。※調子に乗ってウェイト時間(500ミリ秒)もconst intで定数として設定しました。
const int LED1 = 12; const int LED2 = 11; const int LED3 = 10; const int LED4 = 9; const int wait = 500; void setup() { pinMode(LED1, OUTPUT); pinMode(LED2, OUTPUT); pinMode(LED3, OUTPUT); pinMode(LED4, OUTPUT); } void loop() { digitalWrite(LED1, HIGH); digitalWrite(LED2, LOW); digitalWrite(LED3, LOW); digitalWrite(LED4, LOW); delay(wait); // wait for a second digitalWrite(LED1, LOW); digitalWrite(LED2, HIGH); digitalWrite(LED3, LOW); digitalWrite(LED4, LOW); delay(wait); // wait for a second digitalWrite(LED1, LOW); digitalWrite(LED2, LOW); digitalWrite(LED3, HIGH); digitalWrite(LED4, LOW); delay(wait); // wait for a second digitalWrite(LED1, LOW); digitalWrite(LED2, LOW); digitalWrite(LED3, LOW); digitalWrite(LED4, HIGH); delay(wait); // wait for a second }上記のプログラムでも問題なく動作しますが、LEDが増えていく度にプログラムが長くなったり、変更箇所が多くなったりとあまりスマートではないですね。
なので、他のやり方を試してみました。下記はfor文を使った例です。これでも全く同じ動作が出来るので、かなりプログラムが短くなりましたね。
void setup() { pinMode(9, OUTPUT); pinMode(10, OUTPUT); pinMode(11, OUTPUT); pinMode(12, OUTPUT); } void loop() { for (int i=12; i>=9; i--) //左から順に点灯 // for (int i=9; i<=12; i++) //右から順に点灯 { digitalWrite(i, HIGH); delay(500); // wait for a second digitalWrite(i, LOW); // delay(10); // wait for a second } }初めのプログラムと同様にconst intでLEDピン名を設定していても動きますが、逆に長くなるし分かりにくいかと思って今回は消しています。
動作時の写真簡単な動作説明としては、i=12から、ループ毎にiを1づつ減らす。減らすのは9まで。現在のiの値(すなわちLEDを接続しているピン番号)をdigitalWrite命令でHIGHにしてLEDを点灯させ、ウェイト時間分待機、次はLOWにしてLEDを消灯させ、ループの初めにもどる。という感じです。
コメントアウトしている「// for (int i=9; i<=12; i++) //右から順に点灯」に入れ替えることで、右がわから順番にLチカさせることが出来ます。また、最後の「// delay(10);」を有効にすることで、LEDが全部消えている時間を差し込むことが出来ます。これをはじめのプログラムでやろうとすると、更に行数が2倍になります。今回のfor文を使ったプログラムのほうが、いろいろと応用が効いて便利そうですね。
下記は点灯時間450ms、消灯時間50msとして動かしてみたときのLED両端の電圧波形をそれぞれオシロスコープで見てみました。※4チャンネルのオシロスコープが久々に役立ちました。4つのLEDが順番にONしているのがわかります。また、点灯の合間に50msの全部消えている時間がちゃんと挿入されていることがわかります。
動作時の波形また、LED点灯時のウェイト時間を2ms辺りまで短くすると、私の目では4つ全部点灯しているように見えます。これがLEDのダイナミック点灯というやつでしょうか。これを応用した7セグメントLEDのドライバICの基板を作ってみたので、興味があれば下記をご覧ください。
TM1640による7セグメントLEDディスプレイ秋月電子で売っているTitan Micro Electronics製7セグメントLEDドライバーIC、TM1640を使用したディスプレイを製作しました。このIC一つで16桁の表示が可能です。nobulabo.com2021.06.14まとめ
4個のLEDを並べて1個づつLチカさせることに成功しました。また、for文を使ったプログラムでの動作も確認できました。次は、スイッチなどの外部入力を使用して、引き続きもっと難しいLチカに挑戦していきましょう。
ボタンを押している間Lチカ【マイコンLチカ道場 Arduino編 1-1】このページは「マイコンLチカ道場 Arduino編」の「1-1:ボタンを押している間Lチカ」に対応するページです。スイッチによる外部入力を使用して動作させてみます。今回は1個の青色LEDと、1個のタクトスイッチを使用します。また、抵抗10kΩを介して5Vに接続しプルアップさせています。nobulabo.com2020.10.27 このページの実験は下記の製品で試すことが出来ます。 リンク リンク リンク