豊四季タイニーBASIC for Arduino機能拡張版の修正中(3)
豊四季タイニーBASIC for Arduino機能拡張版(+ VFD MW25616L対応)の修正中です。
前回から、さらにNeoPixcelを制御するコマンドを追加しました。
・Tamakichi/ttbasic_MW25616L
ブランチ(随時更新) https://github.com/Tamakichi/ttbasic_MW25616L/tree/update_to_v007
2019/10/22 追記
ブランチ版をメインストリーム(V007) にマージして正式版として公開しました。※ブランチは削除しました。
メインストリーム(仕様確定版) https://github.com/Tamakichi/ttbasic_MW25616L
NeoPixel的には1個のLEDあたり、24ビット色なのですが、今回は、メモリ制約等を考慮して、8ビット色としました。
また制御できるLEDは最大で64個までとしました。
NeoPixelのリボン・スティック形状(ストレート)、リング形状、8x8ドットマトリックス形状に対応しました。
追加コマンド(×は未実装、いずれ対応する予定)
補足: コマンドの更新flgは、デフォルト値が1、0を指定した場合はバッファへの書き込みのみで、表示に反映しません。
NUPDATEで、バッファ内容を表示に反映出来ます。
■ 初期設定
NINIT バッファアドレス,ピクセル数
バッファアドレスには、仮想アドレスを指定します。1ピクセルあたり1バイト必要です。
■ 輝度設定
NBRIGHT 輝度
輝度は0(低)~5(高)の範囲で指定します。
■ 表示クリア
NCLS [更新flg]
■ 指定LEDの色設定
NSET 番号,色[,更新flg]
番号はLEDのピクセル番号(0~)、色は0~255(RGB関数を使うと便利)
■ 8x8マトリックスの指定位置にピクセル設定
NPSET X,Y,色[,更新flg]
■ 8x8マトリックスにメッセージ文表示
NMSG 色,速度,メッセージ文
速度はスクロール時のウェイト時間(ミリ秒単位)
■ 8x8マトリックスを指定方向に1ピクセルスクロール
NSCROLL 方向[,更新flg]
■ 8x8マトリックス ライン描画
NLINE X1,Y1,X2,Y2,色[,モード] [,更新flg]
モードは、0:直線(デフォルト)、1:矩形、2:矩形塗りつぶし
■ バッファ表示反映
NUPDATE
■ LEDの表示をシフト
NSHIFT 方向[,更新flg]
LEDの表示を1つずらします。
先頭のLEDの色は最後尾のLEDに設定されます。ループとなります。
■ 8ビット色コード取得
RGB(赤,青,緑)
■ 8x8マトリックス 指定座標色コード取得
NPOINT(X,Y)
結線
NeoPixel |
Arduino |
1 VDD |
5V |
2 DOUT |
(未接続) |
3 VSS(GND) |
GND |
4 DIN |
MOSI(11ピン) |
NeoPixelを制御するプログラムの例
動いている様子
色々とメッセージを表示してみたのですが、
やはり、文字が足りません。漢字はもう少し選定を見直す必要があります。
まだまだ、色々とと見直し中です。
う~ん、メモリが足りず中々厄介です。
追記 2019/06/28
1メートル 30個LED搭載テープ(リボン)を制御してみました。
プログラムで2点(赤と青)を往復運動させています。
プログラムはこんな感じです。
10 NINIT MEM,30 |
10行で、NeoPixel用のメモリ領域として、仮想アドレスMEMから30個分30バイトを確保しています。
20行で、輝度を最大の5にしています。
30行で、念のためすべての表示をクリア
40行、50行で0番目、1番目のLEDに青、赤の色を設定して表示しています。
60行のNはNSHIFTコマンドの実行回数のカウント用、DはNSHIFTの方向引数です。
70行のNSHIFT Dは、LEDの表示を前または後ろに1つ分移動します。
80行で移動数をカウント、
90行で方向転換するための判定と、方向Dの値を逆方向に設定しています。
100行はウェイト
110行は70行にジャンプして繰り返し表示
プログラム次第で色々と面白い動き、表示が出来ると思います。
追記 2019/06/29
1メートル 30個LED搭載テープ(リボン)制御のその2です。
全LEDを一括更新する例として、全LEDを0.5秒間隔で赤、緑、青と変化させています。
動いている様子
プログラムはこんな感じです。
10 NINIT MEM,30:NBRIGHT 3 |
50行~70行で全LEDの色を設定しています。
60行のNSET I,@(C),0 で各LEDの色の設定をしているのですが、
3番目の引数の0を指定することで、バッファのみの書き込みとなります。
80行のNUPDATEで一括してバッファの内容をNeoPixelに反映させています。
60行は、次の処理と等価です。
POKE MEM+I,@(C)
10行のNINITで指定したアドレスのデータに直接値を設定して、
NUPDATEで表示に反映させることも出来ます。
上記に、輝度制御を追加したバージョン
プログラムはこんな感じです。
10 NINIT MEM,30:NBRIGHT 0 |
110行~120行で輝度を変化させる処理を行っています。
NBRIGHTコマンドで輝度を指定します。表示への反映はNUPDATEの実行します。
NBRIGHTコマンドはちょっと見直そうと思います。
・NUPDATEを呼び出さずに、表示に反映
・輝度を-3 ~ 5 として、マイナス値で減光出来るようにする
最近のコメント