フォト
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          
無料ブログはココログ

日記・コラム・つぶやき

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月18日 (日)

食いしん坊たま吉さん(猫)の図

おやつに物足りなさを感じてごみ箱をあさり、袋を未練がましく舐める、食いしん坊たま吉さん(猫)の図。
先月、食欲不振で病院に連れて行き、非常に心配していたのですが、完全に回復しました。

Dscn2123

Dscn2125

ゴミ箱をあさるので一時、ふた付き(ふたが回転するタイプ)ゴミ箱に変更したのですが、
そのふたが首にはまった状態で、徘徊していたため危険と判断し、戻しました。

2019年8月14日 (水)

たまちゃんを保護して10年になりました

本日でたまちゃんを保護して10年となりました。

今日のたまちゃんの様子

   たま: 『おやつくれ~』

   おやつのおねだりは、この位置に来てふて寝&目力で「じー」とにらんでアピールします。
   ここにいるときに、おやつを何回かあげたのを学習したようです。
  Dscn2122

  たま: 『ね、はやく、おやつちょうだいよー』
  Dscn2103


10年前の保護時の様子


   保護時(段ボールで廃棄されていた)は、体重は200グラム後半、目は開いていたので
   生後10~14日くらいだと思います。とにかく小さい。

   生後間もないため、3~4時間おきにミルク授乳、おしっこ、うんちの介助が必要で大変でしたが、
   元気に育ってくれました。
   幸運なことに、非常に丈夫で元気なねこちゃんです。

  20090815114604

  20090815161412   

  20090817173432  

今後も健康で末永く時間を一緒に過ごしていきたいです。

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月 5日 (月)

Maker Fare Tokyo 2019に行ってきました

今年も東京ビッグサイトで開催されたMaker Fare Tokyo 2019に行ってきました。
01_20190805084801 02_20190805084801

今年は本家の運営団体が営業停止等、心配なところがありましたが、
会場は大盛況で、色々なアイデアと元気を分けてもらいました。楽しい時間を過ごせました。

とりあえず、会場の雰囲気の記録(メモ)として、写真を列挙します(自分用)。
Dscn1985 Dscn1984

Dscn1990 Dscn2025 Dscn2022 Dscn2021 Dscn2019 Dscn2017 Dscn2009 Dscn2005 Dscn1997 Dscn2055 Dscn2056 Dscn2060 Dscn2063Dscn2066
Dscn2070 Dscn2073 Dscn2076 Dscn2077 Dscn2078 Dscn2080Dscn2051 Dscn2046 Dscn2043 Dscn2031 Dscn2035 Dscn2021

2019年7月27日 (土)

たまちゃん、夏バテ?

先週から今週の頭にかけて、たまちゃんの具合が悪く、元気が無い状態でした。
水、ごはんを全く口にせず、頻繁に吐き、飼い主としては気が気ではない状態でした。

Dscn1911

病院で色々と検査したのですが、
  ・エコー検査で、胃腸があまり活動していない
  ・血液検査で白血球の数が基準値よりも少ない

と、微妙に不安なところがあるものの、はっきりとした原因は特定出来ず。
とりあえず、水分補給の点滴、胃腸のお薬注射で様子見となりました。

それが効いたのか、次の日からごご飯を少し食べるようになり、
徐々に回復していきました。現時点ではもとのたまちゃんに戻りました。

お天気的に変な状況だったので、
夏バテだったのかな

とりあえず、ひと安心しました。

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月15日 (月)

GitHub Gist掲載プログラムソースをココログに埋め込む

ココログのリニューアル以降、<pre>タグを使ったプログラムソース掲載が正しく動作せず困っていたのですが、
GitHub Gist掲載プログラムソースを埋め込む方法で代替え出来そうです。

次のソースは、Gist掲載プログラムソースを埋め込んでいます。
見た目のカスタマイズは、下記の記事が大変参考になりました。
   ・Gistのコードをブログに埋め込む際のカスタマイズ【プラグインなし】
      https://reasonable-code.com/gist-embed-customize/

埋め込み例
<script src="https://gist.github.com/Tamakichi/f973ac8e9204ad4ada6babe19c1bedfc.js"></script>
上記のデザイン変更は、ココログのCSS定義で次の設定を行っています。

行番号表示を無くしたり、フォントサイスを小さくしたり、行間を詰めたり、背景色を付けたりしています。
一番下のGitHubバーの表示も消せるのですが、どのソースを参照しているか分からなくなるため、あえて付けています。
ただし、高さを狭くして目立たないようにしました。

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

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

より以前の記事一覧