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が光る撮影は難しいですね。
実物はもう少し水色できれいなんですけどね