// 5個のRGB LEDのピン定義(Red, Green, Blueの順)
// 配線に合わせてピン番号を変更してください
const int rgbPins[5][3] = {
{2, 3, 4}, // 1個目のRGB LED (R, G, B)
{5, 6, 7}, // 2個目のRGB LED (R, G, B)
{8, 9, 10}, // 3個目のRGB LED (R, G, B)
{11, 12, 13},// 4個目のRGB LED (R, G, B)
{A0, A1, A2} // 5個目のRGB LED (R, G, B) ※アナログピンもデジタル出力として使えます
};
const int numRgbLeds = 5; // RGB LEDの総数
void setup() {
// すべてのピンを出力モードに設定
for (int i = 0; i < numRgbLeds; i++) {
for (int c = 0; c < 3; c++) {
pinMode(rgbPins[i][c], OUTPUT);
}
}
}
// LEDを指定した色で光らせる関数 (r, g, b は 0 または 1)
void setRgbColor(int ledIndex, int r, int g, int b) {
digitalWrite(rgbPins[ledIndex][0], r);
digitalWrite(rgbPins[ledIndex][1], g);
digitalWrite(rgbPins[ledIndex][2], b);
}
// すべてのRGB LEDを消灯する関数
void clearAll() {
for (int i = 0; i < numRgbLeds; i++) {
setRgbColor(i, LOW, LOW, LOW);
}
}
void loop() {
// 5個中「3つ点灯、2つ消灯(3点2滅)」の状態を順番に横に流す
// 連続する3つのLEDを光らせるため、開始インデックスは 0 から 2 まで
for (int startIdx = 0; startIdx <= numRgbLeds - 3; startIdx++) {
clearAll(); // 一度すべて消す
// 3つのLEDを点灯させる(位置によって色を変えると綺麗です)
// 1つ目:赤, 2つ目:緑, 3つ目:青 など
setRgbColor(startIdx, HIGH, LOW, LOW); // 赤
setRgbColor(startIdx + 1, LOW, HIGH, LOW); // 緑
setRgbColor(startIdx + 2, LOW, LOW, HIGH); // 青
delay(400); // 流れのスピード(ゆっくり:0.4秒)
}
// 逆方向へ流す場合
for (int startIdx = numRgbLeds - 3; startIdx >= 0; startIdx--) {
clearAll(); // 一度すべて消す
setRgbColor(startIdx, LOW, HIGH, HIGH); // シアン(水色)
setRgbColor(startIdx + 1, HIGH, LOW, HIGH); // マゼンタ(紫)
setRgbColor(startIdx + 2, HIGH, HIGH, LOW); // イエロー(黄色)
delay(400); // 流れのスピード
}
}