LoginSignup
1
2

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

Last updated at Posted at 2024-05-08
  • RP2040-ZEROを使ってNeoPixelを制御するサンプルプログラム④です。

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

    虹色に光らせて徐々に色を変化するのを眺めて癒される

  • プログラム環境

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

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

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

  • サンプルプログラム

少し明る過ぎるようでしたら、BRIGHTNESSの数値を下げると暗くなります。


#include <Adafruit_NeoPixel.h>

#define LED_PIN      8
#define LED_COUNT_X  6
#define LED_COUNT_Y  6
#define BRIGHTNESS   24 // 明るさを24に設定

Adafruit_NeoPixel strip(LED_COUNT_X * LED_COUNT_Y, LED_PIN, NEO_GRB + NEO_KHZ800);

void setup() {
  strip.begin();
  strip.setBrightness(BRIGHTNESS); // 明るさを24に設定
  strip.show(); // 全てのピクセルをオフに初期化
}

void loop() {
  // レインボーサイクルを全体に表示
  rainbowCycle(25);
}

// レインボーサイクル
void rainbowCycle(uint8_t wait) {
  uint16_t i, j;

  for(j = 0; j < 256 * 5; j++) { // 5 cycles of all colors on wheel
    for(i = 0; i < strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
    }
    strip.show();
    delay(wait);
  }
}

// Wheel関数: 色相を取得
uint32_t Wheel(byte WheelPos) {
  if(WheelPos < 85) {
    return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
  } else if(WheelPos < 170) {
    WheelPos -= 85;
    return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  } else {
    WheelPos -= 170;
    return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
}

  • このプログラムを作成した時の考え方

メインはloopを繰り返しています。
カッコの数値は、更新時間を設定しています。
数値を大きくすると色の変化がゆっくりになります。
数値を小さくすることで、色変化しているのが分かりやすいですね。

void loop() {
  // レインボーサイクルを全体に表示
  rainbowCycle(25);
}
  • rainbowCycleの動作

numPixelsでLEDの個数を取得しています。
変数iでLEDの個数分の色を指定しています。
それが終わったらshowでLEDの表示を更新しています。

// レインボーサイクル
void rainbowCycle(uint8_t wait) {
  uint16_t i, j;

  for(j = 0; j < 256 * 5; j++) { // 5 cycles of all colors on wheel
    for(i = 0; i < strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
    }
    strip.show();
    delay(wait);
  }
}

  • WheelでLEDの色を作る。

 上のレインボーサイクルで送信する色の部分を作成

// Wheel関数: 色相を取得
uint32_t Wheel(byte WheelPos) {
  if(WheelPos < 85) {
    return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
  } else if(WheelPos < 170) {
    WheelPos -= 85;
    return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  } else {
    WheelPos -= 170;
    return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
}
  • 実行結果

虹色に色を変えながら徐々に変わっていくのを眺めると
癒されますね!

make39_20.jpg

make39_21.jpg

make39_22.jpg

make39_23.jpg

プログラミングは我流でちゃんと勉強しておらず、
動けばOKな感覚でやっているので、
間違っているところがあればご指摘をもらえると嬉しいです

1
2
0

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