LoginSignup
1
2

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

Posted at

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

  • サンプルサンプルプログラム内容

 LEDの光る箇所をランダムに光らせます。
 ぼーっと見ているだけでも癒されます

  • プログラム環境

 ArduinoIDE バージョン:2.2.1
 使用ライブラリAdafruit NeoPixel Library 1.12.0

  • ハードウェアの主な仕様

 マイコン:PR2040-ZERO
 NeoPixel接続ピン GPIO8
 乾電池2本でお外へ持ち出し可能。

  • サンプルプログラム

//ランダムで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としています。


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

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

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

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

  // 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); // 明るさの変化速度を調整するための遅延
  }

徐々に暗くしていく

  // 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がほわんほわんと点いたり消えたりします。

      strip.setPixelColor(flashingIndices[i], strip.Color(0, brightness, brightness));
  • 実行結果

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

make39_10.jpg

make39_11.jpg

make39_12.jpg

1
2
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2