電池で駆動するNeoPixel制御ボードのサンプルプログラム③

# RP2040-ZEROを使ってNeoPixelを制御するサンプルプログラム③です。

- ## サンプルサンプルプログラム内容
　LEDの光る箇所をランダムに光らせます。
　ぼーっと見ているだけでも癒されます

- ## プログラム環境
　ArduinoIDE バージョン：2.2.1
　使用ライブラリAdafruit NeoPixel Library 1.12.0

- ## ハードウェアの主な仕様
　マイコン:PR2040-ZERO
　NeoPixel接続ピン　GPIO8
　乾電池2本でお外へ持ち出し可能。

- ## サンプルプログラム



```c++
//ランダムでLEDを光らせるサンプルプログラム

#include <Adafruit_NeoPixel.h>

#define LED_PIN 8
#define NUM_LEDS 36
#define NUM_FLASHING_LEDS 24
#define BRIGHTNESS 16 // LEDの明るさを設定 (0～255)

// NeoPixelの設定
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, LED_PIN, NEO_GRB + NEO_KHZ800);

void setup() {
  strip.begin();
  strip.setBrightness(BRIGHTNESS); // 明るさを設定
  strip.show(); // Initialize all pixels to 'off'
}

void loop() {
  // ランダムに選択されたLEDのインデックスを生成
  int flashingIndices[NUM_FLASHING_LEDS];
  for (int i = 0; i < NUM_FLASHING_LEDS; i++) {
    flashingIndices[i] = random(NUM_LEDS);
  }

  // LEDをゆっくりと明るくする
  for (int brightness = 0; brightness <= 128; brightness++) {
    for (int i = 0; i < NUM_FLASHING_LEDS; i++) {
      strip.setPixelColor(flashingIndices[i], strip.Color(0, brightness, brightness));
    }
    strip.show();
    delay(10); // 明るさの変化速度を調整するための遅延
  }

  delay(500); // 最大の明るさに達した後の待機時間

  // LEDをゆっくりと暗くする
  for (int brightness = 128; brightness >= 0; brightness--) {
    for (int i = 0; i < NUM_FLASHING_LEDS; i++) {
      strip.setPixelColor(flashingIndices[i], strip.Color(0, brightness, brightness));
    }
    strip.show();
    delay(10); // 明るさの変化速度を調整するための遅延
  }

  delay(500); // 最小の明るさに達した後の待機時間
}


```


- ## 	このプログラムを作成した時の考え方
LEDの個数は6x6の36個
そのうち24個を光らせるにしていますが、ランダムで光らせるLEDの番号を決めているのでかぶると個数が少なくなっています。
明るさは16としています。

```c++

#define NUM_LEDS 36
#define NUM_FLASHING_LEDS 24
#define BRIGHTNESS 16 // LEDの明るさを設定 (0～255)

```

光らせるLEDの番号をランダムで作成する

```c++
  int flashingIndices[NUM_FLASHING_LEDS];
  for (int i = 0; i < NUM_FLASHING_LEDS; i++) {
    flashingIndices[i] = random(NUM_LEDS);
  }
```

光らせるLEDの番号を指定して徐々にLEDの明るさを上げていきます。
MAXを128にしているのは、それ以上にしても明るさの変化が分かりにくいため、制限しています。

```c++
  // LEDをゆっくりと明るくする
  for (int brightness = 0; brightness <= 128; brightness++) {
    for (int i = 0; i < NUM_FLASHING_LEDS; i++) {
      strip.setPixelColor(flashingIndices[i], strip.Color(0, brightness, brightness));
    }
    strip.show();
    delay(10); // 明るさの変化速度を調整するための遅延
  }
```

徐々に暗くしていく

```c++
  // LEDをゆっくりと暗くする
  for (int brightness = 128; brightness >= 0; brightness--) {
    for (int i = 0; i < NUM_FLASHING_LEDS; i++) {
      strip.setPixelColor(flashingIndices[i], strip.Color(0, brightness, brightness));
    }
    strip.show();
    delay(10); // 明るさの変化速度を調整するための遅延
  }
```

色はここで変えています。
strip.Color(0, brightness, brightness)
RGBのGとBの部分を徐々に上げて下げています。
R=0としているので赤色は無し、RとGの混合で水色っぽい感じに仕上げています。
青色にしたければG=0にする。
strip.Color(0, 0, brightness)
赤色にしたければG,B=0にする。
strip.Color(brightness, 0, 0)
などお好みに変えることができます。

ランダムに光るLEDがほわんほわんと点いたり消えたりします。

```c++
      strip.setPixelColor(flashingIndices[i], strip.Color(0, brightness, brightness));
```

- ## 実行結果
光るLEDの箇所がランダムに切り替わってほわんほわんと点滅します
それにしてもLEDが光る撮影は難しいですね。
実物はもう少し水色できれいなんですけどね

 ![make39_10.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782127/aeb6c70d-be0a-c7ce-1fb8-d12b9945acf6.jpeg)

![make39_11.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782127/2ccbf221-b61c-815e-1f3f-fb56eb510434.jpeg)

![make39_12.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782127/eb483619-4338-7f80-4efb-44f25017ce22.jpeg)