LoginSignup
1
2

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

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

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

    6x6に並んだNeoPixelの指定したLEDを光らせる。

  • プログラム環境

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

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

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

  • サンプルプログラム

make39_neopixel17.ino

#include <Adafruit_NeoPixel.h>

#define LED_PIN    8  // NeoPixelのデータピン
#define LED_COUNT 36  // LEDの総数 (6x6)
#define LED_WIDTH  6  // LEDマトリクスの幅
#define LED_HEIGHT 6  // LEDマトリクスの高さ
#define LED_BRIGHTNESS 24 // LEDの明るさ (0-255)

Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);

void setup() {
  strip.begin();
  strip.setBrightness(LED_BRIGHTNESS); // 明るさの設定
  strip.show(); // 初期化時は全てのLEDを消灯する
}

void loop() {
  // 例:LED配列の(2, 3)の位置にLEDを点灯させる
  int x = 2;
  int y = 3;
  int ledIndex = getLedIndex(x, y);
  if (ledIndex != -1) {
    strip.setPixelColor(ledIndex, 255, 255, 255); // (R, G, B) の色指定
    strip.show();
  }
  delay(1000); // 1秒間LEDを点灯させる
}

// (x, y) 座標からLEDのインデックスを取得する関数
int getLedIndex(int x, int y) {
  if (x >= 0 && x < LED_WIDTH && y >= 0 && y < LED_HEIGHT) {
    return y * LED_WIDTH + x; // 座標からインデックスを計算
  }
  return -1; // インデックスが範囲外の場合は-1を返す
}

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

データピンは、マイコンのGPIO8ピンとNeoPixelが接続してめ決定しています。

#define LED_PIN    8  // NeoPixelのデータピン

NeoPixelの数を決めています。

#define LED_COUNT 36  // LEDの総数 (6x6)

マトリックスの縦横のLED数を指定しています。
LEDを光らせる場所を、横を0から幾つ、縦に0から幾つといった
指定をするために定義しています。

#define LED_WIDTH  6  // LEDマトリクスの幅
#define LED_HEIGHT 6  // LEDマトリクスの高さ

NeoPixelの明るさを指定します。
MAX値は255ですが、USBの供給能力を考慮すると127以下での使用がベターです。
昼間の日の下でなければ十分な明るさになります。
部屋の中で使用するならば16から32ぐらいで十分な明るさがあります。

#define LED_BRIGHTNESS 24 // LEDの明るさ (0-255)

NeoPixelに信号を送るときの命令です。

Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);

光らせる場所を指定する。
このサンプルプログラムの場合、
 左上から0, 1, 2と数えて2番目
 左上から0, 1, 2, 3と数えて3番目
を指定したところが光ります。

  // 例:LED配列の(2, 3)の位置にLEDを点灯させる
  int x = 2;
  int y = 3;

make39_01.jpg

上で設定したx, yの位置指定をLEDの順番指定「ledIndex」に変換します。
LEDは、RED, GREEN, BLUEで指定しています。
RED, GREEN, BLUEは、255に指定しているのでLEDが白色で光ります。

  int ledIndex = getLedIndex(x, y);
  if (ledIndex != -1) {
    strip.setPixelColor(ledIndex, 255, 255, 255); // (R, G, B) の色指定
    strip.show();
  }

これを踏まえて(1, 1) R=255, G=0, B=0とすると
(2, 2)が赤色に光ります。

  int x = 1;
  int y = 1;
  int ledIndex = getLedIndex(x, y);
  if (ledIndex != -1) {
    strip.setPixelColor(ledIndex, 255, 0, 0); // (R, G, B) の色指定
    strip.show();
  }

make39_02.jpg

1
2
8

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