ESP32-S3を使用した、大人のプログラミング教室シリーズです。
前回は複数のLEDの明るさを制御して、おしゃれにフォンフォンさせました。
今回はRGBフルカラーLEDを使って、ランダムに発光させてみましょう。
RGB LEDとは?
RGB LEDには、それぞれ赤(Red)、緑(Green)、青(Blue)の光を発することができる3つのLEDが内蔵されています。そして4つのピンがあります。長いピン(1)は共通端子(Common Port)、つまり3つのLEDのプラスまたはマイナスの端子になります。共通プラス端子を持つRGB LEDとそのシンボルを以下に示します。 3つのLEDそれぞれが異なる明るさで光るように制御することで、RGB LEDからさまざまな色の光を発光させることができます。
赤、緑、そして青は光の三原色として知られています。これらの三原色を異なる明るさで組み合わせることで、ほぼ全ての種類の可視光を生成することができます。パソコンの画面、携帯電話のスクリーンの画素、ネオンサインなどは、この原理で動作しています。
理論上、3つの8ビットPWMを使用してRGB LEDを制御すれば、異なる組み合わせによって28×28×28=16,777,216(1600万色)の色を生成することができます。
回路図
接続図
RGB LEDの右から番目が共通プラス端子で、一番長い端子です。向きを間違わないように気をつけましょう。
コード
/**********************************************************************
Filename : ColorfulLight
Description : Use RGBLED to show random color.
Auther : www.freenove.com
Modification: 2022/10/20
**********************************************************************/
const byte ledPins[] = {38, 39, 40}; //define red, green, blue led pins
const byte chns[] = {0, 1, 2}; //define the pwm channels
int red, green, blue;
void setup() {
for (int i = 0; i < 3; i++) { //setup the pwm channels,1KHz,8bit
ledcSetup(chns[i], 1000, 8);
ledcAttachPin(ledPins[i], chns[i]);
}
}
void loop() {
red = random(0, 256);
green = random(0, 256);
blue = random(0, 256);
setColor(red, green, blue);
delay(200);
}
void setColor(byte r, byte g, byte b) {
ledcWrite(chns[0], 255 - r); //Common anode LED, low level to turn on the led.
ledcWrite(chns[1], 255 - g);
ledcWrite(chns[2], 255 - b);
}
コード解説
今回のポイントは18~21行目ですね。
void loop() {
red = random(0, 256);
green = random(0, 256);
blue = random(0, 256);
setColor(red, green, blue);
delay(200);
}
random()関数で乱数を生成しています。28は256ですが、0から数えると0~255の範囲です。ですので0~255の範囲のランダムな数を生成しています。このようにプログラミング言語には関数という便利な命令が色々と用意されています。全てを覚える必要はないですし、自分で関数を作ることもできます。よく使うものは自然と覚えてしまいますが、少し時間があいてしまえば忘れたりもします。どんなプログラマーでも全ての関数を覚えているような人はいませんし、他人の作った関数を使うことも多々あるわけなので、必要なときに検索して探すものと思っておくのが良いです。
今回はちょっと簡単でしたね。次回は徐々に色が変わるように制御してみましょう。
コメント