Aliexpressで面白うそうなLEDモジュールを見つけたので、M5Stamp PicoでLチカ 第2弾をしました。なお、このLEDモジュールはアマゾンでも販売していました
このLEDモジュールはWS2812 5050を8個搭載しており、1本のデータ信号でこれらを制御することが出来ます。それにより1モジュール1ピンとなるため、GPIOピンの節約が出来そうです。今回もナイトライダー風にしますが、折角なのでパターン違いで2モジュール制御したいと思います。回路は非常に簡単です
本モジュールの制御には、Adafruit_NeoPixelライブラリを使用しました。ArduinoIDEのライブラリマネージャーで簡単に追加できます
// LED 制御(WS2812B)
#include <M5unified .h>
#include <dafruit_NeoPixel.h>
#define PIN1 18 // LEDのデータを接続するGPIO
#define PIN2 19 // LEDのデータを接続するGPIO
#define LED_NUM 8 // 接続LED数(4の倍数)
#define LED_MSK (LED_NUM/2) -1
#define LED_DLY 50 // 点灯時間
#define MAX_LED 128 // 明るさ
// LED config
Adafruit_NeoPixel strip1 = Adafruit_NeoPixel(LED_NUM, PIN1, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel strip2 = Adafruit_NeoPixel(LED_NUM, PIN2, NEO_GRB + NEO_KHZ800);
void setup() {
auto cfg = M5.config();
M5.begin(cfg);
// LED setup
strip1.begin();
strip2.begin();
}
int z = 0;
void loop() {
int x = 0;
int y = 0;
for (int i = 0; i < LED_NUM; i++ ){
// LED1 設定
strip1.clear(); // LED1 消灯
x = i & LED_MSK;
y = ~x & (LED_NUM-1);
strip1.setPixelColor(x, strip1.Color(0, MAX_LED, 0));
strip1.setPixelColor(y, strip1.Color(0, MAX_LED, 0));
strip1.show();
// LED2 設定
strip2.clear(); // LED2 消灯
if ((z % 2) == 0) {
strip2.setPixelColor((i), strip2.Color(0, MAX_LED, 0));
} else {
strip2.setPixelColor(((LED_NUM-1)-i), strip2.Color(0, MAX_LED, 0));
}
strip2.show();
delay(LED_DLY);
}
z++;
}
13行目、14行目のAdafruit_NeoPixel宣言は、モジュール内のLED総数、割当てピン、蘇秦データのカラー順序(今回はRGB)、駆動周波数は800KHzで設定しています
22行目、23行目の.begin()でGPIOの出力設定が行われます
25行目、43行目の.clean()で全てのLEDを消灯しています
38,39行目、45,47行目の.setPixelColor()で表示するLEDとカラー(RGB順)を設定します(今回は緑色にしています)
なお、strip1はLED 0 → 3、LED 7 → 4の順で2個づつ表示、strip2はLED 0 → 7 → 0の順で表示しています
カラー設定値を半分にして明るさが変わるか試しましたが、これでも眩しいです
次は何をしてみようかな...
0 件のコメント:
コメントを投稿