ArduBlock 日本語でArduinoをブロックプログラミング

ArduBlockとは  (2015.8.20時点)

ArduBlockのおすすめなところ

ArduBlockの困ったところ

ArduBlockのビルド環境の作り方

日本語訳を直したいならこうやって変更する

新しいブロックを追加したいならここを変更する

すっきりさせて、独自ブロックも追加した、ArduBlock日本語パーソナライズ版(ardublock_all.jar)2015.9.10、その変更点

 

ardublock_all.jarファイル(日本語化をすすめてすっきりさせたバージョン)

arduinoIDE1.6.7以降用

ardublock-all-m0m0taro-20151220.jar

 

ardublock_all.jarファイル(日本語化をすすめてすっきりさせたバージョン)

arduinoIDE 1.6.5以前、マウスドラッグ不具合解消版

ardublock-all-m0m0taro-20150917.jar

ardublock-all-m0m0taro-20150906.jarでは、Arduino1.6.5-r2, Java8u60 で確認しているブロックのマウスドラッグ、ドラッグ&ドロップに2回クリックが必要な点を一応修正し、右クリックメニューにブロック消去の項目を追加しました。

その他に、引数を3つつけて呼び出せるサブルーチンブロックを追加し、多くなりすぎて分かりにくくなっていた既成キット用のブロックを削除してすっきりさせ、ファイルサイズも半分くらいにできました。

(2016.1.7追記) ArduinoIDE 1.6.7とjava8u66の組み合わせでブロックのマウスドラッグの不具合が解消されているようなので、そのバグフィックスを取り除いたものもおいておきます。  (マウスドラッグバグフィクス無しバージョンfor ArduinoIDE1.6.7以降)ardublock-all-m0m0taro20151220.jar

 

ardublockを最初から配置してあるarduino1.6.8をこちらにおいておきます。

arduino-1.6.8withArdublockm0m0.zip

ardublockを最初から配置してあるarduino1.6.9はこちらです。

arduino-1.6.9withArdublock_m0m0.zip

特にインストール作業などはせずに、任意の場所に解凍して、arduino-1.6.8フォルダの中のarduino.exeをダブルクリックして起動です。

アンインストールの際はフォルダを削除するだけです。

アルドゥブロックを使うには、arduinoのメニューバーの「ツール」を選択、その中のardublockを選択します。

 

 

 

赤外線受信ブロック、IRremoteエラーが出る not declaireTKD2..とか

IRremoteの時、D11 D3 アナログ出力 PWM が おかしい できない

直したい点

おすすめの課題

JAVA java.lang.OutOfMemoryError: Java heap space エラー 対処

mavenでビルドエラーが解消できない

 

ArduBlock(アルドゥブロック)とは


ardublock日本語21040826beta

ArduBlock とは Arduino IDE を、SCRATCHのようなブロックプログラミングで使えるArduino(アルディーノ)の拡張プログラムです。

 

Arduino IDE をインストールした後、フォルダ内にArduBlockファイルを追加することで使えるようになります。

ArduinoIDEは、 Arduino1.0.6 , Arduino1.6.5 どちらでも使えますが、1.6.5で使うと、私の場合、ブロックのドラッグが2度やらないと動かない不具合がありました。

ArduBlock_all.jar , ArduBlock21040826beta.jar などのファイルをダウンロードしてきて、

 

 

1.マイドキュメントのArduinoフォルダの中に/tools/ArduBlockTool/tool/ardublock-all.jar という配置で.jarファイルを置く。( 例:D:\Users\taro\Documents\Arduino\tools\ArduBlockTool\tool\ardublock-all.jar )

2.Arduino本体を展開したフォルダの中のtoolsフォルダの中に、/ArduBlockTool/tool/ardublock-all.jarという配置で.jarファイルを置く。( 例:E:\arduino-1.0.6\tools\ArduBlockTool\tool\ardublock-all.jar )

のどちらかの方法で設定完了。大文字小文字が違っているとうまくいかないので注意。

 

 

その後、ArduinoIDEを立ち上げ、メニューの中の「ツール」を押すとArdublockが追加されているので、選択するとウィンドウが開きます。

参考ページ

ArduBlock本家サイト(英語)

Arduino初心者にオススメ!GUIで積み木のようにスケッチする『Ardublock』の使い方(IDEA HACK)

私家版Ardublock

 

Ardublockのおすすめなところ

Arudublockのよいところは、感覚的にわかりやすいブロックプログラミングができて、Arduino(アルディーノ)にアップロードしてしまえばusbコードを外しても自律でプログラムを実行しつづけてくれるところです。

他のブロックプログラミングで外部のLEDやモーターなどを制御しようとすると、USBコードをつないだ有線の状態でしか制御できないものが多いようです。

・ScratchはUSBコードをつないだ状態で、「ひとつ」のモーターを制御する。そのままだと2つのモーター制御はできないようです。ロボットカーだと前進、停止、後退だけで曲がれません。

・レゴマインドストームはマイコン搭載でケーブルなしの制御ができるようですが、とにかく高い、とのことです。

・Arduino + Ardublock + ちっちゃいものくらぶ小型ギヤモーターなら、1,500円から3,000円で2モーター制御のロボットカーがブロックプログラミングで実現できます。(マイコンボードは、ATmega328のものが分かりやすく他にも転用しやすいため高めの選択も考慮しています。)

 

Ardublock(アルドゥブロック、アルディブロック)の困ったところ

日本語で使おうと思った場合、最新版(21040826beta)は英語のまま日本語にできていないところがあったり、エラーメッセージや、説明のポップアップが英語のままの部分が多かったり、デジタルピン出力のピンナンバーがプルダウン選択式になったのですが、D10ピンへの命令がうまくいかないバグがあるなど完全ではありません。

しかし、21040826betaでないそれ以前のバージョンだとirremote 赤外線レシーバーのブロックがないので、テレビリモコンでロボット操作ができません。

子どもに教えようと思ったときこうしたエラーでつまづくと、子供のプログラムに間違いがあるのか、ArduBlock側のバグなのかすぐには分からず、チェックしている最中に子供の集中がとぎれてしまい困りました。

現在の最新版で、2014年8月リリースのもので、その後のバグ修正などは追いついておらず、プルリクエストも反映されていません。

開発チームは息切れ気味のようで、修正を待っているより自分でなんとかしたいところです。

 

バグがあるから、と使うのをあきらめるには惜しい素晴らしさが、ArduinoとArduBlockの組み合わせにはあります。

びっくりするほど簡単にArduino(アルドゥイーノ)の自律制御が実現できます。

 

Ardublock を自分好みに変更するには。ビルド環境の用意

では、使いいいように、日本語訳を自分好みにしたり、バグを直したり、新しいブロックを加えるにはどうすればいいでしょうか?

 

ソースを改造したのちに自分でビルドして.jarファイルを得ます。

少し親しみにくいコマンドラインを使う必要があります。

Ardublockをソースからビルドするために必要なインストール

1.JAVA開発環境 JDK http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

2.maven http://maven.apache.org/download.html

3.OPENBLOCKS  https://github.com/taweili/openblocks

4.ArduBlock  https://github.com/taweili/ardublock

 


 

1.1 JDKのインストールについて

JDKのダウンロードページへ行って、JDK の文字を追ってページを進んでいくと、英語でわかりにくいですが、これを書いている今は一番上にJava SE Development Kit 8u51と書いてあるページにたどり着きました。

8U51とはデベロップメントキット8 のアップデート51版という意味のようです。

「Accept licence agreement」にチェックを入れて、お使いのOS用のファイルをダウンロードします。

私の場合はWindows7 32ビットなので、

Windows x86 176.02 MB   jdk-8u51-windows-i586.exe

↑ これです。

ダウンロードしたファイルを実行します。

「次へ」、「次へ」、インストールする場所の選択、特に強いこだわりがなければそのままOK、でインストール完了です。

チュートリアルは見ずに閉じてしまってもよいでしょう。

もっと詳しく知りたい場合は、JDK インストールで検索です。

1.2 次はちょっと分かりにくい環境変数の設定です。

スタートメニューの「コンピュータ」右クリック、プロパティを選択。

開いたウインドウの中から「システムの詳細設定」を探し、クリック。

新しく開いたウインドウの「環境変数(N)」をクリック。

上下二つある四角のうち下の方、システム環境変数、の新規ボタンをクリック。

変数名:JAVA_HOME

変数値:C:\Program Files\Java\jdk1.8.0_51←私の場合(JDKをインストールしたフォルダの場所)

OKを押したら次です。

次はシステム環境変数Pathの設定です。

システム環境変数Pathを設定しておくと、設定したフォルダ内のファイルは、プログラム名だけで実行することができようようになります。

変数一覧の中にPathがもうある場合は編集をおして、末尾にJDKをインストールした場所の中のbinフォルダの場所を付け足します。もう記入されている部分と新しく足す部分の間には ; が区切り記号として必要なので忘れないでください。

C:\Program Files\Java\jdk1.8.0_51\bin; ←私の場合の付け足す内容。インストールした自分の環境に合わせ書き換えてください。

変数一覧の中にPathがない場合は新規を押して、

変数名:Path

変数値:C:\Program Files\Java\jdk1.8.0_51\bin;

です。先ほどJAVA_HOMEの設定の時とくらべ、JDKをインストールした場所に加え、\binが増えてます。

環境変数の設定ができました。

コマンドライン(真っ黒画面)で設定がうまくできているか確認します。

スタートメニューの、プログラムとファイルの検索かファイル名を指定して実行のどちらかに「cmd」といれてエンターキーでコマンドラインウインドウが立ち上がります。真っ黒ですが怖いことはありません。

>java -version

でエラーが出なければ、(javaのバージョンが表示されれば) Pathはうまく設定できています。

>set java_home

で設定したフォルダの位置が表示されればJAVA_HOMEはうまく設定できています。

おつかれさまでした。

今後進めるうちにもしエラーがでたら、PathとJAVA_HOMEの設定内容に凡ミスがないか見直してみてください。

 


 

2.1 Mavenのインストール

Mavenダウンロードページからバイナリ形式zipファイルをダウンロードします。

 Binary zip archive apache-maven-3.3.3-bin.zip

↑ これを書いている今はこれでした。

ダウンロードしたらどこかに展開(解凍?)します。どこにしたらよいか分からない場合はCドライブ直下でよいのではないでしょうか。私はそうです。

2.2 もう一度Maven用に環境変数の設定です。

スタートメニュー、「コンピューター」を右クリック、プロパティ、システムの詳細設定、システム環境変数、Pathをクリックしてから「編集」です。

最後に先ほど展開したフォルダの中の、binフォルダの場所を付け足してあげます。もう記入してある前の内容と今回記入する内容の間には ; の区切り記号が必要なので忘れないように。

C:\apache-maven-3.3.3\bin; ←私の場合(自分の環境に合わせて書き換えてください。)

okを押したらうまく設定できているか確認です。

コマンドラインウインドウ(真っ黒画面)を立ち上げ、(開いたままだったら一度閉じてから立ち上げなおしてください。)

>mvn --version

でApache Maven 3.3.3........とバージョンが表示されていたらうまく設定できました。

おつかれさまでした。

(プロキシを使わないといけない環境の場合はもう少し設定が必要なようです。検索してみてください。)

 


 

 3.OPENBLOCKSのビルド

これで「ソースからビルド」ができるようになったわけですが、ArduBlockはOPENBLOCKSソースの中のファイルも参照しているということで、ArduBlockをビルドするまえにOPENBLOCKSをインストールしておかないといけないということです。

Githubのオープンブロックスページ https://github.com/taweili/openblocks

このページの右のやや下のdownload zip からソースファイル()をダウンロードしてください。

どこかに作業スペース用フォルダを作って、ダウンロードしたzipファイルを展開してください。

あまり複雑な場所ではない方がいいと思います。Github関係では作業スペースをリポジトリというようなので(間違ってるかもしれません。)repoというフォルダをDドライブに作ってみました。

D:\repo\openblocks-master ← こうなります。

これで先ほど用意したmavenが使えます。mavenはコマンドライン(真っ黒画面)から使うツールです。

スタートメニュー プログラムとファイルの検索窓に「cmd」か、ファイル名を指定して実行に「cmd」か、すべてのプログラム>アクセサリ>コマンドプロンプトで、コマンドラインウインドウ(真っ黒画面)を立ち上げます。

openblocks-masterフォルダの中まで移動します。

コマンドラインでフォルダ移動のコマンドは「cd」です。

c:¥>d:     で、Dドライブに移動します。

d:¥>cd repo     でrepoフォルダに移動

d:¥repo>cd openblocks-master  で目的のopenblocks-masterフォルダに移動できました。

d:¥repo¥openblocks-master>

(ちなみに、ひとつ上のフォルダに移動したいときは >cd .. です。)

ここで、

d:¥repo¥openblocks-master>mvn install

英語がずらずらーと出て、(結構長い)最後にBuild Success が出たら成功です。

オープンブロックスの準備ができました。

コマンドラインの使い方についてもっと知りたい方はこのあたりをみてみてください。

コマンドラインの使い方参考ページ

 コマンドプロンプトWindowsの便利な使い方、

 コマンドプロンプトを使ってみよう  

 


 

4.ArduBlock のビルド、(コンパイル?)

いよいよ本丸のArduBlockのビルドです。

 GithubのArduBlockページ https://github.com/taweili/ardublock 

このページの右のやや下のdownload zip からソースファイル(ardublock-master.zip)をダウンロードしてください。

openblocks-masterと同じrepo(仮)フォルダに展開しましょう。

D:\repo\ardublock-master ← こうなります。

コマンドラインウインドウ(真っ黒画面)がもし開いたままなら、

d:¥repo¥openblocks-master>cd ..  ← ひとつ上のフォルダへ移動

d:¥repo>cd ardublock-master

d:¥repo¥ardublock-master>      ← arudublock-masterフォルダの中まで移動できました。

GithubページのInstallation、使い方(Usage)にあるように、

d:¥repo¥ardublock-master>mvn validate

 

d:¥repo¥ardublock-master>mvn exec:java -Dexec.mainClass="com.ardublock.Main"

(↑もし2行に見えていても画面の都合なので改行しないで入力してください。)

どちらもずらずらーと英語が出ます。

2番目のコマンドでardublockウインドウが立ち上がり、表示の具合を確認できます。

openblocksを先にインストールしていなかった場合は2番目の方が失敗するようです。その時は次のコマンドです。

d:¥repo¥ardublock-master>mvn compile exec:java -Dexec.mainClass="com.ardublock.Main"

ardublock-masterフォルダの中のtargetフォルダの中を見てください。

ardublock-master/target/ardublock-all.jar  ← これがビルド(コンパイル?)されたardublockファイルです。

無事にビルドできる環境ができました。

ソースを自分好みに編集、変更、追加したのちに、

>mvn clean package

>mvn compile exec:java -Dexec.mainClass="com.ardublock.Main"

でtargetフォルダに変更の反映された.jarファイルが作られ、Ardublockウインドウが立ち上がり、表示され具合を確認できます。

参考ページ:  ArduBlockのコンパイル (日本語)

 

注)mavenでどうしても依存ファイルが見つからないエラーが出る

ardublockのインストールを先にしてしまい、後でopenblocks をインストールしたのですが、その後ardublockをインストールしようとしても、依存ファイルが見つからないエラーがでました。(私の場合はarduino pde.jar)

いろいろ検索して試しましたが、なかなか解消できませんでした。

(mavenの一時ファイルを消したり、リポジトリをクローンしなおしてみたり。)

これが正しい方法か分かりませんが、mvn eclipse:eclipse をしてみたらその後解消しました。

(エクリプスは使っていない、はずです。目にしないだけでバックグラウンドで動いているのかもしれません。)

参考ページ


 

 日本語訳を直したいならこうする。

修正するファイルは

D:\repo\ardublock-master\src\main\resources\com\ardublock\block\ardublock_ja.properties

修正したい部分のプロパティー名?を同じフォルダの中の ardublock.xml の中から見つけだし、書き換える。

ただし、utf-16でエスケープされていてそのままでは読めないので、 小粋空間 Unicodeエスケープシーケンス変換ツール こういったツールで解読して確認したり、エスケープした後、貼り付けてください。

 

 


 

新しいブロックを追加したいならこうする。

1.ブロックが画面にどう表示されるか( <BlockGenus...>から</BlockGenus>まで )、そのブロックを左メニューのどこに表示するか( <BlockDrawer・・・の中の<BlockGenusMember>.......l</BlockGenusMember> ソースの一番最後の方についている)を

`src/main/resources/com/ardublock/block/ardublock.xml` のファイル中に追加作成する。

2.新しい見出しが必要となるなら

`src/main/resources/com/ardublock/block/ardublock.properties` の中に追加作成する。

3.そのブロックがArduinoIDE上にどのようなソースで変換出力されるか、のjavaファイルを

`src/main/java/com/ardublock/translator/block/` の中に作成する。

4.ardublock.xmlの中のBlock Genus Name が translator/block/の中のどのファイルに対応するかを

`src/main/resources/com/ardublock/block/block-mapping.properties` の中で指定する。

 

一から作るのではなく、今あるブロックの中で、シンプルそうなもの、または構造が似ていそうなものを選んで改造する。

たとえば、KeyboardBlock.java はシンプルで分かりやすい。ループの中にソースを追加する部分がないのでそれは別のブロックを真似する。

トランスレーター ブロックのjavaファイルはファイル名とソース中の名前が一致することが必要。

KeyboardBlock.java

public class KeyboardBlock  extends TranslatorBlock {
    public KeyboardBlock(Long blockId, Translator translator, String codePrefix, String codeSuffix, String label)

 

ソケットの内容の取得

        String DataPin;
        String IRQpin;
        TranslatorBlock translatorBlock = this.getRequiredTranslatorBlockAtSocket(0);  ← 適当な名前を付けた変数(オブジェクト?、インスタンス?)に
        DataPin = translatorBlock.toCode();                               ← 各ソケットの内容を代入している
        translatorBlock = this.getRequiredTranslatorBlockAtSocket(1);
        IRQpin = translatorBlock.toCode();

 

ヘッダーでインポートするファイルの追加の仕方

        translator.addHeaderFile("PS2Keyboard.h");  ←インポートしたいライブラリのファイル名をここに。

セットアップに追加の仕方

        translator.addSetupCommand("delay(1000);"           ←セットアップの中に追加したいソースを " ;" + " ;" + " ;" で書く
                  + "keyboard.brancher(DataPin, IRQpin);"

                + "Serial.begin(9600);");
       

定義に追加の仕方

        translator.addDefinitionCommand("// Pin keyboard\n"      定義部分に足したいソースを積み上げる。
                + "const int DataPin = " + DataPin +";\n"
                + "const int IRQpin =  " + IRQpin + ";\n"
                + "PS2Keyboard keyboard;\n"    );
       


ループにソースを追加する仕方、作り方( EqualBlock.javaより )

        String ret = "( ( ";
        TranslatorBlock tb = this.getRequiredTranslatorBlockAtSocket(0);      ←ret (返す値、returnの略でしょう)の中にloop中に
        ret = ret + tb.toCode();                                    足したいソースを積み上げていく。
        ret = ret + " ) == ( ";
        tb = this.getRequiredTranslatorBlockAtSocket(1);
        ret = ret + tb.toCode();
        ret = ret + " ) )";
        return codePrefix + ret + codeSuffix;

 手本になるトランスレーターブロック.javaファイルはフォルダ内にどっさりあるので、どんどん開いて法則を覚える。

 


 

 

ひとまず用意してみたパーソナライズ版

ardublock-all_7ku_20150812.jar

1.英語のまま残っていて日本語ランゲージファイルが反映されなかった部分を手直し

2.日本語訳をすすめ、好みに変更

3.デジタルピンoutput の指定をプルダウンから数字指定に戻した。

4.文字列equal のうちひとつを char* のイコールで使えるようにstrcmp() の方のブロックに変更した。(ブロックファイルは存在したが、割り当てられていなかった。)

5.kahlTHさんのバグ修正と改良をいくつか反映した

6.Icewire-makerspaceさんのreadmeが分かりやすかったので取り込んだ。

 

ひとまず用意してみた日本語ArduBlockパーソナライズ版やり直し

 ardublock_all.jarファイル(karlTH版ベースのひとまず日本語バージョン) ardublock-all_karlTH_ja_20150817.jar
 ソース(karlTH版ベースのひとまず日本語バージョン) ardublock-master-karlTH-ja-20150817.zip

 

↓ 沢山ありすぎるオプションブロックを減らしてシンプルにしたバージョンはこちら ↓

 ardublock_all.jarファイル(karlTH版ベースのひとまず日本語バージョン) ardublock-all_karlTH_ja_20150820.jar
 ソース(karlTH版ベースのひとまず日本語バージョン) ardublock-master-karlTH-ja-20150820.zip

 

方針を変更して、karlTHさんの latest commit a7af5fa7a6 という状態の、21040826betaの後にバグ修正され、機能追加されているfolk版(枝分かれ派生版?)をベースに修正しました。

1.英語のまま残っていて日本語ランゲージファイルが反映されなかった部分を手直し

2.日本語訳をすすめ、好みに変更

3.「比べる」内「==」 文字列equal のうちひとつを char* のイコールで使えるようにstrcmp() の方のStringEqualBlock.javaブロックに変更した。(ブロックファイルは存在したが、割り当てられていなかった。変更前はどちらも ((    ) == (    )) )

C++の初心者には分かりにくいところでchar*はポインターであり、ポインターのさすところを == で等しいかどうか比べられるものではないのだとか。

4.Icewire-makerspaceさんのreadmeが分かりやすかったので取り込んだ。

(20150816-01)

5.variable_string 文字列変数(char*)のブロックのコネクターをpoly型に変更。こちらが正しいのでは?ir_getcodeとstring_equalのソケットもpoly型に変更した。

何かつじつまの合わない部分を発見したら戻そうと思います。

 

ardublock_all.jarファイル(日本語化をすすめてすっきりさせたバージョン) ardublock-all-m0m0taro-20150917.jar

 ardublock- all-m0m0taro-20150906.jarでは、Windows7, Arduino1.6.5-r2, Java8u60 で確認しているブロックのマウスドラッグに2回クリックが必要な点を一応修正し、右クリックメニューにブロック消去の項目を追加しました。

比べるメニュー内、char poly 用 ==、 != の条件式は、単純に ==, != の変換に戻し、IRremote の IRcode ブロック(char poly) の判定には、文字列が等しい、ブロックを使う仕様にしました。


サブルーチンブロックに3つの引数つきバージョンを追加しました。

引数は参照渡しとして、loop()内の変数値にサブルーチン内で変更が反映されるようにしました。

赤、青、緑、3原色LEDのFADEで活躍してくれました。

 

赤外線コード受信エラー(IRremote)が出る

楽しくTVリモコンでロボットを無線操作するための、

irremote 赤外線レシーバーポート設定、赤外線レシーバーコードを取得 のブロックはこのままでは使えません。

1.IRremoteライブラリをダウンロードして(作者のgithub か arduinoページからたどる場合はこちら)、D:\arduino-1.0.6\libraries\IRremote に配置。

2.IRremoteフォルダ内のIRremote.h を コピーしてIRremote00.h にリネーム (念のためそのままの名前のファイルも残してください。)

3.それでもうまくいかず、”TKD2なんたら宣言されてませんエラー” が出る場合は、librariesフォルダ内のRobotIRremoteというフォルダを削除して再度試す。

だれかがRSコンポーネンツ製ロボット用にRobotIRRemoteフォルダ内でIRremoteを変えてしまってるためコンフリクトが起こってるということです。早く取り除いてほしいです。

 

IRremote 赤外線コード受信 の時、D11 D3 の アナログ出力、PWM出力ができない。 おかしい

IRremoteライブラリを用いて、ArduBlockでロボットカーをテレビリモコンで操作しようとした場合、モーターを D10 D11 につないで駆動してPWM、アナログ出力しようとすると思ったように動きません。

Arduinoは、Timer0 Timer1 Timer2 という3つのタイマーを持っており、PWM出力はこのタイマーを使って出力していて、D3,D11 のPWMはTimer2を使って出力しています。

IRremoteは赤外線コードの解析にTimer2を利用しているので、IRremoteを使っているときは、 D3 D11 のPWM アナログ出力は使えないということです。

ArduBlockのバグかと思って調べまくってしまいました。

そのため、IRremoteを使ってPWM アナログ出力したいときには、Timer0 Timer1 で出力されている D5 D6 D9 D10 などを使いましょう。(ArduBlockでなくても)

ArduBlock 21040816betaでは、D10ピンのバグがあるので、PWM出力でロボットカーしようとすると頓挫する可能性大です。


 

直したい点

poly string String char char* などがこんがらがって分からない。

あまり使われることがないからこそこんがらがったままの状態なのかもしれないが、一応整理してみたい。

リモコンからの赤外線コードを==で真偽判定したかったが変数型が違う、のようなエラーが出てくじける。これを解消したい。

(その後) 

translatorブロックのソースの中身を見ながら日本語訳をあてたら、ある程度分かるようにできた気がする。

こんなもんでいいかという気がしてきた。

しかし、一応後で、どのブロックがどのトランスレーターで、どのような出力になるか、表を作ってみたい

 


 

おすすめの課題

・LEDは一つの点滅でなく、5個から10個くらいを順番に光らせたい。

ちっちゃいものくらぶさんの、ちびかー。 モータードライバなしで2モーターを直接デジタルピンで駆動する自律ロボットカーが可能。画期的で楽しい。発見していただきありがとうございました。とても小さく作れるのでこれまた好みの方向。

小さいギヤモーター+タイヤセットを購入し、マイコンはマイコンボード設定ファイルの書き換えの手間をなくし、他の実験にも広く対応、使いまわしたいところなのでatmega328のminiproかnano的なものにしてあげたいところ。

電池ボックスは単4でより小さくした。かっこいい。

・そのちびかーを 手持ちのテレビリモコンで動かす。

 


 

Arduino (C++)の主に文字に関しての変数型、ArduBlockソース内の文字列型、クラスの名前の混乱を整理すべく表を作成してみる

char 'A' シングルクォート 一文字     (本家英語版リファレンスページ char

char* (=string , char array ,char poly) "ABCD " ダブルクォート charの配列 char[5] = 'A','B','C','D' とも表せる。詳しくはリファレンス参照   (本家英語版リファレンスページ char array

String String関数 最初のSが大文字か小文字かで全く意味の異なるものとなる。Ardublockのソースの中ではクラス名やファイル名で実際の姿と一致していないと思ってよい。    (本家英語版リファレンスページ String Object

 参考ページ: Arduino 日本語リファレンス          英語 Arduino language reference

char array = 小文字のstring は strcmp() でしか真偽判定できないようなので、 小文字stringの方(パズルっぽいソケットの形の方)の == と != を それ用のトランスレーターjavaファイルに変更した(==の方は、もともと存在していたが割り当てられていなかったjavaファイル )。  ← 20150906のファイルでただの== , != に変換するように戻しました。 文字列が等しいの比べるブロックをstrcmp()使うものに割り当てました。

 

日本語メニュー名本家

日本語メニュー名ひとまず版 BlockGenusname translator file name (mapping) translatorの出力ソース メニューに存在有無
char変数名 文字(char)変数名 variable_poly VariablePolyBlock char name = ''; あり
string name 文字列(char*)変数の名前 variable_string VariableStringBlock char name[64] = ""; あり
String variable 文字列(String)変数 variable_String variable_String String name = ""; あり
set String variable 文字列(String)変数に値をセット setter_variable_String setter_variable_String name = "value"; あり
char変数に値をセット 文字変数(char)に値をセット setter_variable_char SetterVariablePolyBlock name = 'value'; あり
A A char PolyBlock "label" あり
           
== == equal_poly

EqualBlock 変更した

→StringEqualBlock

((   ) == (  )) 

→ strcmp(first,second)==0

あり

 

== == equal_string EqualBlock ((   ) == (   )) あり
!= != not_equal_poly

NotEqualBlock 変更した

→StringNotEqualBlock

((   ) != (   )) 

→ strcmp(first,second)!=0

あり

 

!= != not_equal_string NotEqualBlock ((   ) != (   )) あり
           
is empty 文字列(char*)が空だったら string_empty StringEmptyBlock strlen(name) == 0 あり
    string_greater GreaterBlock ((   ) > (   )) なし
    string_less LessBlock ((   ) < (   )) なし
equals 文字列が等しい(String) string_equal EqualBlock ((   ) == (   )) あり
    string_greater_equal GreaterEqualBlock ((   ) >= (   )) なし
    string_less_equal LessEqualBlock ((   ) <= (   )) なし
    string_not_equal NotEqualBlock ((   ) != (   )) なし
    string_equals string_equals String internal_var = first; internal_var.equals("second"); なし
    string_equalsIgnoreCase string_equalsIgnoreCase String internal_var = first; internal_var.equalsIgnoreCase("second"); なし
toInt toInt string_toInt string_toInt String internal_var = first; internal_var.toInt() == "second"; あり
    string_compareTo string_compareTo String internal_var = first; internal_var.compareTo("second")<0 なし
           
  文字列を整数型に toint Toint name.toInt(); karlTHさんがメニューに追加
           
  文字列をシリアルへ glue_poly GluePolyBlock そのまま(変数型を変換してくれるわけではない) あり
    glue_msg GlueMSGBlock ¥¥¥¥ → ¥¥¥¥¥¥¥¥ (なんかのエスケープ?) なし
真偽値をシリアルへ 数値をシリアルへ glue_sn GlueSNBlock そのまま(変数型を変換してくれるわけではない) あり
真偽値をシリアルへ 真偽値をシリアルへ glue_sb GlueSBBlock そのまま(変数型を変換してくれるわけではない) あり

 

(その後にgithubを沢山開いて分かったこと)

ヘ・キチェンさんがこのコミットで「文字列が等しい」、「文字列が空だったら」ブロックを小文字string、char* 、用に用意した。(たぶんIRremoteのために)


しかし、

意図してか、どうか分からないが、マークトーマスさんのこのコミットで大文字String文字列関係のブロックを増やしたり、整理したりした際に、

src/main/resources/com/ardublock/block/block-mapping.properties の中での 「文字列が等しい」ブロックの割り当てトランスレーター.java が、StringEqualBlock から ただの EqualBlock に変わってしまった。(出力内容でいうと、strcmp() == 0 から ただの == に変わった。)

これをどのように整理するのがよいのか、議論してみたいところだが、英語力に自信がないのとGITHUBにアカウントがないのでできていない。

 

 

 

 ArduBlock でjava.lang.OutOfMemoryError: Java heap space 

JAVA のメモリーが不足して動作不安定になることがある場合、JAVAコントロールパネルでメモリーのオプション設定を変更して様子を見てみましょう。

ArduBlockはけっこう大きな拡張プログラムなので、メモリーが足りなくなることがあるようです。

Arduinoでライブラリーをたくさん取り込んでいてもおこることがあるようです。

1.コントロールパネル>プログラム>Java で Javaコントロールパネルが開きます。

2.Javaタブを押して、 Javaアプリケーション、ランタイム・・・・設定 の 表示ボタンを押します。

3.表示されたジャヴァの表のうち「ランタイムパラメータ」をクリックかダブルクリックして「-Xmx256m」と入力してOK、32ビットの場合 -Xmx1024m まで増やしてみることが可能だそうです。