上図のように、Arduinoで3つのLEDをコントロールする場合に、GND側を1つにしてしまう接続にするのか、5V側を1つににしてしまう接続にするのか、2つのやり方を選ぶことができました。
これは電子業界では、アノードコモンかカソードコモンと呼びます。
フルカラー RGB-LED
私たち人間の目に見える物体の色はR(赤)G(緑)B(青)という3つの色ですべてが表現できる、光の3原色というのは、小学校の理科で習ったと思います。
構造
実は電子業界にはとても器用なLEDがあって、1個の玉の中でこの3色を光らせることができるLEDがあるのです。これがフルカラーRGBLEDと呼ばれるものです。
3つの色のLEDがたまたま小さなあの玉の中にはいっているわけですから、当然それぞれの色をコントロールするための足はあり、そして、共通になるGNDか5Vの足があります。
左が右側のこの器用なLEDを大きく見た内部で、細い足がそれぞれRGB、左から2番目のデカくて長い足が5VかGNDになります。
みただけではどっちかわかりません…
どっちで光るのか?
買うときに「アノードコモン」と書いたものを買ったのか「カソードコモン」と書いたものを買ったのか?メモしておけばいいのですが、こんなLED1個1個にメモしておくこともできないので、コロンと机の上に転がっているこれを、どっちで光るかちょっと強引に試してみましょう。
LEDは+-逆に接続しても壊れることはないので、強引にいってみます
とりあえず共通の足をGNDに刺して
隣の5Vにジャンパーワイヤをさして、どれかの足を触ってみる
※GNDの足を触ってはいけません!ショートして壊れます!
これでピカっと光れば、GNDが共通なので、GNDは(-)側….LEDでは(-)側はカソードと呼びますので、このLEDはカソードコモンのLEDです。
これでピカっと光らなければ逆の5Vが共通なので、5Vは(+)側….LEDでは(+)はアノードと呼びますので、このLEDはアノードコモンのLEDです。
使う方向がわかったらつないで光らせてみる
相変わらずブレッドボードを使わない無理やりな接続ですがこんな感じでつないでみました。
共通GND(-)の足をジャンパーワイヤーでGNDへ、余った足を13,12,11へ直接刺してみました。
どれが何色かわかりませんが、とりあえず13から順に1秒ごと光らせてみましょう!
1色ずつ光らせる
void setup() { pinMode(13,OUTPUT); pinMode(12,OUTPUT); pinMode(11,OUTPUT); } void loop() { digitalWrite(13,HIGH) ; //13だけにHIGHを出力 digitalWrite(12,LOW) ; digitalWrite(11,LOW) ; delay(1000); digitalWrite(13,LOW) ; digitalWrite(12,HIGH) ;//12だけにHIGHを出力 digitalWrite(11,LOW) ; delay(1000); digitalWrite(13,LOW) ; digitalWrite(12,LOW) ; digitalWrite(11,HIGH) ;//11だけにHIGHを出力 delay(1000); }
結果的に、どうも左からRGBのようですね!
2色ずつ光らせる
void setup() { pinMode(13,OUTPUT); pinMode(12,OUTPUT); pinMode(11,OUTPUT); } void loop() { digitalWrite(13,HIGH) ; //13だけにHIGHを出力 digitalWrite(12,HIGH) ; digitalWrite(11,LOW) ; delay(1000); digitalWrite(13,LOW) ; digitalWrite(12,HIGH) ;//12だけにHIGHを出力 digitalWrite(11,HIGH) ; delay(1000); digitalWrite(13,HIGH) ; digitalWrite(12,LOW) ; digitalWrite(11,HIGH) ;//11だけにHIGHを出力 delay(1000); }
全色での点滅
void setup() { pinMode(13,OUTPUT); pinMode(12,OUTPUT); pinMode(11,OUTPUT); } void loop() { digitalWrite(13,HIGH) ; //13だけにHIGHを出力 digitalWrite(12,HIGH) ; digitalWrite(11,HIGH) ; delay(1000); digitalWrite(13,LOW) ; digitalWrite(12,LOW) ;//12だけにHIGHを出力 digitalWrite(11,LOW) ; delay(1000); }
こんなこともできます
ポートはHIGHでもLOWでもセットできるなら、全部の足をポートに刺して、GNDに刺すところを常にLOWにして使いたいところだけをHIGHにしても光るのではないでしょうか?
プログラム
void setup() { pinMode(13,OUTPUT); pinMode(12,OUTPUT); pinMode(11,OUTPUT); pinMode(10,OUTPUT); digitalWrite(12,LOW) ; //12はいつもLOW } void loop() { digitalWrite(13,HIGH) ; //13だけをHIGH digitalWrite(11,LOW) ; digitalWrite(10,LOW) ; delay(1000); digitalWrite(13,LOW) ; digitalWrite(11,HIGH) ;//11だけをHIGH digitalWrite(10,LOW) ; delay(1000); digitalWrite(13,LOW) ; digitalWrite(11,LOW) ; digitalWrite(10,HIGH) ;//10だけをHIGH delay(1000); }