フォト
2019年9月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30          
無料ブログはココログ

arduino

2019年9月 4日 (水)

豊四季タイニーBASIC - I2C EEPROMへのプログラム保存

豊四季タイニーBASIC for Arduino機能拡張版は、
作成したプログラムを内部EEPROMの領域に1つだけ保存することが出来ます。

これとは別に、外付け(I2C接続)EEPROMにも保存出来ます(以降、外部接続EEPROMと呼称)。

下記の写真はブレッドボード上に実装したEEPROMです。
   Dscn2173

対応しているEEPROMは24xxx系 (5V対応のもの)で、
4kバイト(32kビット)~64kバイト(512ビット)の容量に対応します。

動作確認 EEPROM
   AT24C32、AT24C64、24LC64、AT24C256、24LC256、24FC512、AT25C32

保存可能ファイル数
   17
   ※ 容量が1024ビットタイプのEEPROMでも保存は可能ですが、利用出来る容量は512ビット(64kバイト)となります。

使い勝手は次のような感じです。
10_20190903184501

Formatコマンドで初期後、Saveコマンドでファイル名で保存、
Filesコマンドでファイル一覧の表示、Loadコマンドでプログラムの読み込みが出来ます。
プログラムは、ファイル名(12文字)を付けて保存することが出来ます。

12

Filesコマンドでは、ワイルドカード(*、?)が利用可能です。
Files ""、Files " は Files "*"と等価です。


外部接続EEPROMの実装

EEPROMの結線は次のような感じになります。
    09_20190903181301
       プルアップ抵抗は、2 ~ 10kΩの範囲(Arduinoでプルアップしているため無く可)、
       コンデンサは無くても可、I2Cスレーブアドレスは$50に設定(A0 ~ A2ピンで$50 ~ $57の設定が可能)

EEPROMI2Cアドレスの設定により、最大8個のEEPROMを同時接続して利用することが出来ます。

実際には、市販モジュールの利用がお手軽です。種類も色々とあるようです。
いくつか持っている中で、写真のタイプが使いやすいです。
Dscn2166

amazonでもいくつかの業者が取り扱っています。
 ・KKHMF AT24C256 I2C インターフェースEEPROMメモリモジュール
   13

このモジュールは、ジャンパピン (ショートピン) の設定でI2Cスレーブアドレス、ライトプロテクトの設定が出来て便利です。
乗っているEEPROMをの差し替えも出来ます(4kバイト(32kビット) ~ 64kバイト(512ビット)で交換)。
(ICソケットが逆についているモジュールがあるようです。基板のシルク印刷を確認し、逆ならICを付け直しましょう)

動作確認のため、4つのモジュールを同時接続してみました。
Dscn2179
4つのうち2つはAT24C256、残り2つは24FC512を乗せています。
I2Cスレーブアドレスは、0x50、0x51、0x52、0x53と異なるアドレスを割り当てています。

アダプタを製作して接続してみました。

Dscn2180

4つをI2C接続している様子
Dscn2184

4つ同時利用はあまり意味が無いのですが、スレーブアドレス違いでの利用の検証です。

まずは、Formatコマンドで各EEPROMを初期化します。
Driveコマンドで利用するEEPROMを指定して、フォーマットします。

14

DRIVEコマンドの引数 "A"、"B"、"C"、"D"はEEPROMのI2Cスレーブアドレス $50、$51、$52、$53に対応します。
Formatコマンドの引数はEEPROMの容量指定と、ドライブ名(任意)です。
"A"、"B"、"C"、"D"のかわりに、$50、$51、$52、$53の指定も可能です。

次に簡単なプログラムをファイル名を変えて各EEPROMに保存してみます。

15

保存したプログラムをFilesコマンドで確認してみます。
Filesコマンドの引数 "" すべてのファイルを一覧表示します。
ワイルドカード指定 "*" でもOKです。

16

個々のEEPROMをちゃんと識別し、それぞれに保存出来ています。

Filesコマンドの出力の1行目はドライブ名、
2行目はファイル名一覧(存在するファイル数により出力行数は可変)、
3行目の出力は
  条件パターン一致ファイル / 全ファイル数 (保存可能ファイル数) 
を意味します。

条件パターン一致ファイル数 は "t*.bas" のようにワイルドカード指定時で一致したファイル数が表示されます。
今回は一致ファイルが1つで、存在するファイル数も1つなので 1/1 となります。

こんな感じで、外付けのEEPROMへの保存が可能です。

2019年8月29日 (木)

豊四季タイニーBASIC for Arduino機能拡張版のラインエディタについて

豊四季タイニーBASIC for Arduino機能拡張版のラインエディタについて少々、解説します。
(現在整備中のマニュアルにも記載します)

SRAMが2kバイトしかないため、スクリーンエディタの実装が無理だったのですが、
ラインエディタでもストレスなく編集できるよう、機能強化しました。

下記が利用可能な操作で利用する編集キーの一覧です。

04_20190829085501

いくつかの編集操作を紹介します。

1) 行番号 + [Tab]キーで編集対象行の指定
  05_20190829202601
   ">"(プロンプト)の後に、編集したい行番号を入力し、[Tab]キーを押すと、
   その行の内容を表示して編集できる状態にします。

  06_20190829202601 
   20 と入力し[Tab]キーを押すと、該当行の内容を表示します。

  07_20190829202601
  この状態で、[←][→]キーでカーソル移動、[Home]、[End]キーで行頭、行末にカーソルを移動、
  [BS]、[Del]キーで文字削除、任意の文字入力、IMEを使った日本語入力が出来ます。
    
  修正確定は[Enter]キーを押します。
  修正確定前に[Tab]キーを押すと修正前の内容に戻します。

2) [↑][↓]キーで前後の行の表示

08_20190829214601
[↑]キーで現在編集している前の行、[↓]で次の行の表示をします。
また、   ">"(プロンプト)表示だけの状態では先頭行、最終行を表示します。

大した追加機能では無いですが、ラインエディタでもそこそこ使えるようになったと思います。

2019年8月26日 (月)

豊四季タイニーBASIC Arduino機能拡張版 V0.07 ほぼ完成

豊四季タイニーBASIC for Arduino機能拡張版(+ VFD MW25616L対応)の次バージョンV0.07、
ほぼ修正を完了し、以降はテストとマニュアル類の整備作業に入ります。
作業が終わり次第、メインストリームにマージします。

Tamakichi/ttbasic_MW25616L
   ブランチ(随時更新) https://github.com/Tamakichi/ttbasic_MW25616L/tree/update_to_v007

主な変更点
1)GPIO入出力の簡略化
  ・OUT、IN()等のコマンド・関数で事前ピンモード設定を不要にしました
  ・LEDコマンド、LED定数の追加

2)イベント処理・SLEEP機能の追加
  ・タイマー割り込み機能の追加
  ・外部ピン割り込み機能の追加
  ・ボードをスリーブ状態(停止状態)にする機能の追加

3)NeoPixel(WS2812B)対応
  ・リボン・テープ形状、リンク形状の直線タイプの制御
  ・8x8ドットマトリックス形状の制御(メッセージ表示、描画処理)

4)8x8ドット 美咲フォント(シフトJIS 全角500字:英数記号・カタカナ・ひらがな・漢字)対応
  ・指定文字フォントデータの取得

5)中間コードの固定
  ・従来は、ttconfig.hの機能利用オプション設定を変更すると中間コードの値が変わってしまい、
     保存していたプログラムが動作しない問題が発生しましたが、それを解消しました。
   
6)キーワードの変更
  ・可読性を考え、英数字は大文字・小文字を混ぜた表記に変更
  ・下記のキーワード名称の変更
     POUT => PWM、INPUT_FL=>FLOAT、INPUT_PU=>PULLUP


とりあず、新機能でLEDをSLEEP機能を使って点滅させるサンプルです。

サンプルプログラム

10 Print "LEDのピン番号は、";LED ;"です。"
20 Print "LEDを5回点滅させます。"
30 For I=1 To 5
40 LED On
50 Sleep 500
60 LED Off
70 Sleep 500
80 Next

40行、60行のLEDコマンドでボード上のLEDをオン・オフしています。
50行、70行はSleep 500ではなく、Wait 500でも同様の点滅を行いますが、
Sleepの場合、ボードが休止するため省電力化を図ることが出来ます(多分)。
ちなみに、SLEEPはウオッチドックタイマを使っています。

実行の様子
01_20190820151201

汎用的なGPIO出力コマンドのOUT命令を使った場合は次のようになります。
旧バージョンでは、OUT命令を使う前に、GPIOコマンドでピンモードの設定が必要でしたが、
指定不要にしました。ちなみにLED定数は13の値を持っています。

OUT命令を使ったサンプルプログラム

10 Print "LEDのピン番号は、";LED ;"です。"
20 Print "LEDを5回点滅させます。"
30 For I=1 To 5
40 OUT LED,On
50 Sleep 500
60 OUT LED,Off
70 Sleep 500
80 Next

とりあえず、今後はドキュメント類を整備していきます。

2019年8月12日 (月)

豊四季タイニーBASICにSLEEPコマンドを追加する試作

豊四季タイニーBASIC for Arduino機能拡張版(+ VFD MW25616L対応)に
SLEEPコマンド(スリープ機能)を追加しているのですが、意味不明の挙動でハマってしまい、
10日間も停滞して悩んでいました。
本日やっと、解決しました。

Arduino・パソコン間のシリアル通信を確立したまま、スリープ状態に入り、再度起き上がると
シリアル通信が不安定になり、コンソール画面での対話が利用不能になっていました。

対策として、スリープに入る前にシリアル通信を終了し、起き上がるときに再接続をするようにしました。
    Serial.end();
      [スリープ処理]
    Serial.begin(SERIALBAUD);

これで、スリープから起き上がった後に問題無く、通信が出来るようになりました。
試作段階ですが、次のリストは外部割込み処理を行うBASIC言語での記述例です。

サンプルプログラム

1 '外部割込みによるスリープ抜け
10 Gpio 2,Input_PU
20 D=0
30 On Pin 2,Rising GoSub "ext"
40 Pin 2,On
50 ?"スリープ"
60 Sleep
70 ?"スリープ抜け"
80 Input "継続? ",C
90 D=!D
100 LED D
110 Wait 500
120 GoTo 40
130 "ext"
140 Return

サンプルプログラムでは、60行のSleepコマンドでスリープ状態(パワーセーブ)となります。
ピン番号2にボタンを付け、外部割込みを発生させます(30行で定義、40行で有効化)。

02_20190812204601

実行した画面

01_20190812204601

プログラムを実行すると60行でスリープ状態となり停止します。
その状態でボタンを押すと、130行の割り込み処理(実際は何もしていない)を実行後、
70行からプログラム実行を再開します。

前回実装したタイマー割り込み機能でもスリープから抜けて欲しいところですが、
利用したTimer1ではスリープから抜けることは出来ません。
Timer2なら可能なので、変更して対応したいと思います。


2019/08/14 追記

タイマー割り込みの実装をTimer1からTimer2に変更するため、
ArduinoではメジャーなMsTimer2ライブラリを利用に修正しました。

確かにTimer2では、SLEEPから抜けることが出来るのですが
1ミリ秒でSLEEPから抜けてしまいました。

原因を調べるためMsTimer2ライブラリのソースを見てみると、
内部的には1ミリ秒毎に割り込みを行い、カウントして
指定した時間(ミリ秒)毎に登録した関数を呼び出すようになっていました。
MsTimer2は使えないことが判明しました。

タイマー割り込みで、SLEEP抜けをするのは諦め、
ウオッチドックタイマを使った、SLEEP抜けを検討します。

2019年8月 2日 (金)

SSD1322搭載3.12インチ OLEDの動作確認

AliexpressでコントローラSSD1322搭載 3.12インチ OLEDディスプレイを入手しました。

入手サイト
TZT Real OLED Display 3.12" 256*64 Dots Graphic LCD Module Display Screen LCM Screen SSD1322 Controller Support SPI
01_20190802090601

$20.70と少々お高いですが、以前に比べるとお手頃な価格になってきました。

実際の製品

届いた製品です。0.96インチ(上)と比較するとやはり大きいです。
Dscn1942

マニュアル類の付属がないため、製品販売ページの情報をもとに使い方は調べる必要があります。
購入先の業者に問い合わせても良いと思います。


製品仕様について

てっきりモノクロ(単色)だと思っていたのですが、
SSD1322の仕様を調べると、1ドット当たり4ビットの16階調表示でした。
256x64ドット、1ドットあたり4ビットのためバッファを使う方式でのプログラム実装では
バッファサイズは8kバイト必要となります。

2x16のピンヘッダでの接続となります。
インタフェースとしては、SPIの他にパラレル接続も可能です。
Photo_20190802094501
デフォルトではパラレル接続モードになっています。
裏のシルク印刷の設定をみてSPI(4SPI)接続に変更しました(R6の抵抗を取ってR5につける)。
Dscn1976

SPI(4SPI)で利用する場合、モジュールのピンヘッダのうち、下記のピンを利用します。
(Reset、CS、DCはArduinoの任意のピンでOK)
02_20190802094201
Arduinoでの動作確認

利用ライブラリ

ググって探して、次のライブラリを試してみました。
1) U8glib V2 library for Arduino
    https://github.com/olikraus/U8g2_Arduino
2) Arduino library for 256x64 OLED ER-OLED032-1 (SSD1322 driver)
    https://github.com/cvonk/arduino-SSD1322

接続はこんな感じです。
Dscn1977
結論を先に述べると、1)のU8glibの利用がお勧めです。
16階調表示には対応していないですが、フレームバッファ使わない方式にも対応しています。
下記の画像はU8glibを使った動作です。

Dscn1961
Dscn1965
Dscn1966
表示がとても綺麗です。文字の表示にも、もちょうど良いサイズです。

U8glibのサンプルスケッチをコンパイルする使う場合、コメントアウトされている下記を有効にします。
   U8G2_SSD1322_NHD_256X64_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Enable U8G2_16BIT in u8g2.h

U8glibでも、フルサイズのバッファを使う場合、バッファサイズとして2kバイトが必要です。
Arduino Unoでは利用出来ません。Arduino MEGA2560で利用出来ました。

SPI接続では、OLEDモジュールからの表示内容の読み出しが出来ないため
表示している内容に追記するような場合は、Arduino側でバッファが必要となります。
バッファを使いない場合、グラフィック描画時に制約が発生します。

2)のライブラリはAdafruit_SSD1306がベースのライブラリなのですが、
古いAdafruit_GFXを使っているためか、Adafruit_GFXのメンバ変数参照でコンパイルエラーが
発生し、ライブラリソースの修正が必要でした(このあたりの対応は省略します)。

さらにバッファとして最低2kバイト(単色利用時)が必要です。Arduino Unoでは利用出来ません。
Arduino MEGA2560ではとりあえず動きました。

Dscn1970

16階調での利用は、バッファサイズ8kバイトが必要なため、Arduino MEGA2560でも利用出来ませんでした。


まとめ

このSSD1322搭載の本製品、ドットサイズが256x64、16階調、表示が綺麗で見やすいのです。
文字を表示にも適したサイズです。
ただし、16階調(1ドット4ビット)は、メモリ消費が多くなり、ちょっと使いにくいです。

16階調の表示の評価として、何か写真っぽいのを表示を試して見たいと思います。

2019年7月16日 (火)

Arduino用美咲フォントライブラリを更新しました

Arduino用美咲フォントライブラリ 2つを更新しました。

01_20190716204201

更新したライブラリ

Arduino用 美咲フォントライブラリ 教育漢字・内部フラッシュメモリ乗せ版(UTF16/8対応)
   https://github.com/Tamakichi/Arduino-misakiUTF16

Arduino用 美咲フォントライブラリ 教育漢字・内部フラッシュメモリ乗せ版 SJISバージョン
   https://github.com/Tamakichi/Arduino-misakiSJIS

※ 美咲フォントは、Little Limitさんが開発し、配布しているフォントです。
  ・8×8 ドット日本語フォント「美咲フォント」
     http://littlelimit.net/misaki.htm

主な変更点

ライブラリサイズ 約1.7kバイト弱 削減
   美咲フォントは8x8ドットのフォントなのですが、実質的には8x7ドットのため、
  1文字あたり1バイトを減らすことが出来ました。
  ライブラリサイズ的には、約15kバイト強となります。

SJISバージョンの半角全角変換不具合対応
   ","が全角に変換できませんでした。

#include <arduino.h> ⇒ #include <Arduino.h>に訂正
   大文字小文字を区別するOS(Linux、Mac)でエラーとなる不具合に対応しました。

ライセンスについて追記
  このフォントライブラリについては、
 「美咲フォント」と同様にフリー(自由な)ソフトウエアです。
  あらゆる改変の有無に関わらず、また商業的な利用であっても、自由にご利用、複製、再配布することができます。
  ただし、全て無保証とさせていただきます。


2019年7月13日 (土)

豊四季タイニーBASIC Arduino機能拡張版の修正中(5) タイマー割り込み機能の追加

豊四季タイニーBASIC for Arduino機能拡張版(+ VFD MW25616L対応)の修正、
タイマー割り込み機能を追加しました。

Tamakichi/ttbasic_MW25616L
   ブランチ(随時更新) https://github.com/Tamakichi/ttbasic_MW25616L/tree/update_to_v007

追加コマンド
■ タイマー割り込みの定義
  ON TIMER 周期 GOTO | GOSUB 行番号|ラベル

  周期はミリ秒単位 1 ~ 32767

■ タイマー割り込みのオン・オフ指定
  TIMER ON | OFF

サンプルプログラム

10 ON TIMER 500 GOSUB "BLINK"
20 GPIO 13,OUTPUT:D=LOW:TIMER ON
30 "LOOP":GOTO "LOOP"
40 "BLINK":OUT 13,D
50 IF D ?"Blink!"
60 D=!D
70 RETURN

サンプルプログラムでは、
10行で500ミリ秒毎に、"BLINK"ラベルのある40行のサブルーチンを呼び出すように定義しています。
20行は、LED用の13ピンを出力設定にし、TIMER ONでタイマー割り込みを開始しています。

30行は、"LOOP"ラベルの行、すなわち30行にジャンプです。ここ30行で無限ループを繰り返します。
40行~70行は、タイマー割り込みで呼び出される処理です。LEDを点滅させて、画面に"Blink!"を出力します。

実行時の出力

01_20190713203001

う~ん、
タイマー割り込みが出来れば、
「何か面白いことが出来るのでは?」と思い、組み込んだのですが
使い道が浮かびません。
まあ、イベント処理の実装はちょっと勉強になったので良しとします。

タイマー割り込みは、Timer1ライブラリを利用しました。
コンパイルにも別途、Timer1ライブラリが必要です。 (2019/07/16 本体に組み込みました)


タイマーイベントキューは最大1個としています。
呼び出される処理が、追いつかない場合はイベントは破棄されます。
ですので、呼び出される処理内でカウントして時刻を刻むような処理において、
イベントが破棄された場合は、カウント数がずれます。
回避策として、Windowsみたいに、多重のコマンドイベントが重なる場合は、
1つのイベントにまとめて回数情報を付加する等の処理等が考えられるのですが、
まあ、これで良しとします。

ピン変化イベントも追加する予定でしたが、どうしよう ...

2019年7月 8日 (月)

4連8x8ドットLEDマトリックスを試してみる 続編(2)

以前書いた記事「4連8x8ドットLEDマトリックスを試してみる 続編」に関して
スクロール表示ではなく、固定メッセージを表示したいとの質問があり、ちょっとやってみました。

ハードウェア構成は、前回のSDカードモジュールを使わず、SDカードシールドを使っています。
この方が結線が楽ちんですね。SDカードシールドは意外と安いです。

Dscn1883

動作している様子



スケッチ: ダウンロード - max7219_test3a.zip

  別途自作ライブラリ sdfonts を利用しています。
   ・sdfonts : Arduino用漢字フォントライブラリ SDカード版
     https://github.com/Tamakichi/Arduino-KanjiFont-Library-SD


スケッチを直接貼り付けて掲載したかったのですが、
ArduinoのHTML形式コピーのスケッチを貼るとココログの編集画面が100%暴走するようになり、
掲載出来なくなってしまいました。
まだまだ、リニューアルの後遺症が残っているようです。

代わりに、GitHub(gist)を使って掲載します。


追記

このスケッチで利用している、ビットマップ操作を行う処理、
機能強化&ライブラリ化してGitHubに登録していたことをすっかり忘れていました。
しかも、マニュアルを作成せず、登録しただけ...

 ・Arduino ビットマップ操作ライブラリ
    https://github.com/Tamakichi/libBitmap

暇をみて、ドキュメントを追記しますです。

2019年7月 7日 (日)

豊四季タイニーBASIC for Arduino機能拡張版の修正中(4)

豊四季タイニーBASIC for Arduino機能拡張版(+ VFD MW25616L対応)の修正、
前回から、美咲フォントの漢字選定の変更やらダイエットやらを行いましした。
(コード見直しで500バイトくらいダイエット出来たのですが、機能追加で差し引き0です)

・Tamakichi/ttbasic_MW25616L
   ブランチ(随時更新) https://github.com/Tamakichi/ttbasic_MW25616L/tree/update_to_v007

見た目的には、前回とあまり変わらないのですが、修正で"埼玉"が表示出来るようになりました。

動いている様子



プログラム


10 NINIT ARRAY,64
20 NBRIGHT 1
30 FOR N=1 TO 5
40 C=RND(255)
50 FOR I=0 TO 3
60 NCLS 0
70 NLINE I,I,7-I,7-I,C,1
80 WAIT 150
90 NEXT
100 NEXT
110 NMSG 80,RGB(7,0,0),"こんにちは、埼玉♪"
120 NMSG 80,RGB(0,0,3),"今日は、7月7日です。"
130 GOTO 30


色々と悩んだ挙句、次のフォントを選定しました。
年号、季節、時刻、天気、方向、単位、地形、色を強化しました。

01_20190707203001

フォントは約5kバイト容量を喰うため、他の機能をOFFにする必要があります。
オプション指定で、フォントの利用を無効にすることも出来ます。

また、英数記号・カタカナ・ひらがな 288文字のみ利用可能とするオプション指定も
用意しました。この場合は3kバイト程度の消費となります。

NeoPixel制御はこれくらいにして、次はタイマー割り込み機能に着手します。


2019年6月27日 (木)

豊四季タイニーBASIC for Arduino機能拡張版の修正中(3)

豊四季タイニーBASIC for Arduino機能拡張版(+ VFD MW25616L対応)の修正中です。
前回から、さらにNeoPixcelを制御するコマンドを追加しました。

・Tamakichi/ttbasic_MW25616L
   ブランチ(随時更新) https://github.com/Tamakichi/ttbasic_MW25616L/tree/update_to_v007

02_20190627200601

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を制御するプログラムの例

01_20190627201201

動いている様子

色々とメッセージを表示してみたのですが、
やはり、文字が足りません。漢字はもう少し選定を見直す必要があります。

まだまだ、色々とと見直し中です。
う~ん、メモリが足りず中々厄介です。


追記 2019/06/28

1メートル 30個LED搭載テープ(リボン)を制御してみました。

Dscn1862

プログラムで2点(赤と青)を往復運動させています。



プログラムはこんな感じです。


10 NINIT MEM,30
20 NBRIGHT 5
30 NCLS
40 NSET 0,RGB(0,0,3)
50 NSET 1,RGB(7,0,0)
60 N=0:D=0
70 NSHIFT D
80 N=N+1
90 IF N=28 N=0:IF D=0 D=1 ELSE D=0
100 WAIT 30
110 GOTO 70

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秒間隔で赤、緑、青と変化させています。

Dscn1864

動いている様子



プログラムはこんな感じです。


10 NINIT MEM,30:NBRIGHT 3
20 NCLS
30 @(0)=RGB(7,0,0),RGB(0,7,0),RGB(0,0,3)
40 C=0
50 FOR I=0 TO 29
60 NSET I,@(C),0
70 NEXT I
80 NUPDATE
90 C=C+1:IF C=3 C=0
100 WAIT 500
110 GOTO 50

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
20 NCLS
30 @(0)=RGB(7,0,0),RGB(0,7,0),RGB(0,0,3)
40 C=0
50 FOR I=0 TO 29
60 NSET I,@(C),0
70 NEXT I
80 NUPDATE
90 C=C+1:IF C=3 C=0
100 WAIT 200
110 FOR I=1 TO 5:NBRIGHT I:NUPDATE:WAIT 200:NEXT I
120 NBRIGHT 0:NUPDATE
130 GOTO 50

110行~120行で輝度を変化させる処理を行っています。
NBRIGHTコマンドで輝度を指定します。表示への反映はNUPDATEの実行します。

NBRIGHTコマンドはちょっと見直そうと思います。
 ・NUPDATEを呼び出さずに、表示に反映
 ・輝度を-3 ~ 5 として、マイナス値で減光出来るようにする

より以前の記事一覧