マイコン内蔵RGB LED制御
動作の様子(YouTube)
マイコン内蔵RGB LED(型番:WS2812B)をArduinoで制御してみました。
マイコン内蔵RGB LEDはこちらの製品です。
http://akizukidenshi.com/catalog/g/gI-07915/
仕様書上、制御する波形周期は次のようになっています。
--------------------------------------------------
--------------------------------------------------
マイコンボードは
Seeeduino(Arduino 互換)を使用。
Aruduinoのライブラリは
「Adafruit_NeoPixel」を利用しています。
https://github.com/adafruit/Adafruit_NeoPixel
上記ボードとライブラリでのオシロスコープで実測波形は下記になります。
(標準時間との誤差はありますが、仕様範囲内です。)
データ1
データ0
(横軸:200nsec 縦軸:2.0V)
データ1 High時間 800nsec / Low時間 440nsec
データ0 High時間 320nsec / Low時間 945nsec
ライブラリのソースを確認すると、データ送信処理は速度重視のためアセンブラで記述されていました。
(ソース: Adafruit_NeoPixel.cpp)
【クラスについて】
// LED総数、使用ピンの設定
Adafruit_NeoPixel pixels = Adafruit_NeoPixel( LED総数, PIN, NEO_GRB + NEO_KHZ800);
// 開始
pixels.begin();
// 各LEDデータの保存
pixels.setPixelColor( LED位置, pixels.Color( 赤値, 緑値, 青値));
// 表示の更新
pixels.show();
LEDの表示を固定パターン化する際に、テーブルデータをフラッシュROMエリアに配置する場合
通常のC言語と少し異なり
PROGMEM、pgm_read_word_near、pgm_read_byte_near
などを利用する必要があります。
これについては下記「Arduino 日本語リファレンス」→「PROGMEM」のページにわかりやすく書かれています。
http://www.musashinodenpa.com/arduino/ref/index.php?f=0&pos=1824
関連記事