2024.08.13, ArduBlock 1.0.
ArduBlockユーザーマニュアルファイルをダウンロードできます ここ.
1. ArduBlockの紹介
1.1 ArduBlock とは何ですか?
ArduBlockは、ブロックをドラッグ&ドロップするだけでArduinoプログラムを簡単に作成できるビジュアルプログラミング言語です。プログラミングを学んだことがない人でも、強力なArduinoプログラムを簡単に作成できます。ArduBlockは、サードパーティ開発者のDavid Li氏をはじめとするクリエイターによってArduino IDEのプラグインとして開発され、2014年から2017年10月までリリースされていました。ソースコードはオープンソースで、GitHubからダウンロードして使用できます。(GitHubダウンロード: https://github.com/taweili/ardublock).
ArduBlockは、プログラミング経験のないユーザーがArduinoをすぐに使い始められるようにすることを目的として開発されました。直感的なブロックインターフェースにより、ユーザーは様々な機能を持つブロックをドラッグ&スプリンクリングするだけでプログラムを完成させることができます。各ブロックはArduinoの特定の機能や命令に対応しているため、ユーザーは簡単に理解して使用することができます。

このドキュメントでは、この強力なツールを詳細に説明し、そのさまざまな機能と特徴を理解できるようにします。
主に以下の機能があります。
- Control(制御)
- Pins(ピン)
- Test(テスト)
- Math Operators(計算する)
- Variables/Constants(変数/定数)
- Generic Hardware
- Communication(通信)
- Storage(ストレージ)
- 86HMI
- EtherCAT
- MySQL
- Scoop
- Code Blocks(はじめに)
1.2 Scratch と ArduBlock の違いは何ですか?
Scratchは、MITメディアラボのLifelong Kindergarten Groupが2006年にリリースしたビジュアルプログラミング言語で、子供たちのプログラミング学習を支援します。オープンソースプロジェクトでもあり、ユーザーはあらかじめ用意されたブロックをドラッグ&ドロップしたり、コマンドを積み重ねたりすることで、アニメーションやゲームのプログラミングを完成させることができます。

しかし、ScratchはArduinoと直接的な関係はなく、Arduinoブロックも含まれていません。Scratchを改良し、S4A、S2AなどのArduinoブロックを追加してArduinoプログラムを作成する熱心なプレイヤーもいますが、これらはArduBlockと変わりません。
Wikipedia の紹介: https://en.scratch-wiki.info/
ArduBlock と Scratch の違いの比較表:
| ArduBlock(ブロック・プログラミング) | Scratch | |
| 著者 | David Li with the players | MIT |
| 対象グループ | プログラミング経験のないArduinoプレイヤー | プログラミング経験のない子どもたち。 |
| 公開 | 2014年 | 2006年 |
| Arduino IDEプラグイン | Yes | No |
| ターゲットプラットフォーム | Arduino | PC |
| 作成結果 | さまざまなインタラクティブなインスタレーション | アニメやゲーム |
| ソース | オープン | オープン |
| プログラミング方法 | ドラッグアンドドロップ | ドラッグアンドドロップ |
1.3 ArduBlock を使用する理由は何ですか?
ArduBlockはArduino専用に設計されており、様々な専用ブロックが内蔵されています。ユーザーはブロックの組み立てを完了するだけで、コードが自動的に生成、コンパイルされ、Arduinoにアップロードされます。これは、基本的な経験はないものの、何かを作りたいという初心者にとって使いやすいツールです。多くの教師が、生徒がArduinoプログラミングの基礎を素早く理解できるよう、授業でArduBlockを使用しています。
まとめると、ArduBlockはプログラミング経験のない初心者でも簡単に使える、強力で使いやすいビジュアルプログラミングツールです。直感的なブロックインターフェースと強力な機能を備えたArduBlockなら、誰でも簡単に独自のArduinoプロジェクトを作成できます。
たとえば、EtherCAT の CiA402 制御の例:

生成されたコード:

2. ArduBlockをインストールして起動する
2.1 86Duino IDEをインストールする
86duino IDEをここからダウンロードしてください https://www.qec.tw/software/

ダウンロード後、zip ファイルを解凍してください。追加のソフトウェアをインストールする必要はなく、86duino.exe をダブルクリックして起動します。

*注: Windows に警告メッセージが表示された場合は、[その他の情報] をクリックし、[続行] ボタンをクリックします。


86Duino Coding IDE 500 を開くと、以下のように表示されます。

2.2 ArduBlockを起動する
ArduBlockを起動するには2つの方法があります
「ツール」->「ArduBlock」に移動するか、以下に示すようにアイコンをクリックします。

クリックすると、ArduBlock が起動します。

2.3 完了、コード生成とアップロード
完了したら、「コード生成とアップロード」ボタンをクリックすると、ArduBlock が自動的にプログラム コードを生成し、QEC Mデバイス にアップロードします。

例:EtherCAT の CiA402 制御

生成されたコードは次のとおりです。

3. ArduBlockブロック
3.1 インターフェースの紹介

ブロック領域には、以下の種類のビルディング ブロックが含まれます。
- Control(制御)
- Pins(ピン)
- Test(テスト)
- Math Operators(計算する)
- Variables/Constants(変数/定数)
- Generic Hardware
- Communication(通信)
- Storage(ストレージ)
- 86HMI
- EtherCAT
- MySQL
- Scoop
- Code Blocks(はじめに)
3.2 ブロックの種類
ArduBlock ビルディング ブロックには主に 3 種類の機能があります。
- 開始ブロック
- 一般的なスクリプト構成ブロック
- バリューブロック

3.2.1 開始ブロック

開始ブロックは、メインプログラムまたはサブプログラムが実行を開始するブロックです。
上端と下端は平らで、どちらの端も他のブロックで結合することはできません。
The Program と Loop ブロックは両方とも開始ブロックです。

メインの Arduino プログラムの開始点に相当します。
- Setup(セットアップ)
- loopの前に実行される
- 一度だけ実行
- 空でも可
- Loop
- 内部のスクリプトを繰り返す
Program ブロック

対応する setup() と loop() Arduino IDE のコード

- Setup:
86Duinoハードウェアがスケッチコード(注1)の実行を開始すると、まずsetup()関数を呼び出し、それを使って変数、ピンパターンを初期化し、アナウンスされたライブラリなどを起動します。86Duinoハードウェアは、電源投入またはリセット後に1回だけ実行されます。
- Loop:
loop() 関数は、初期化を実行して変数の初期値を設定する setup() 関数の直後に実行されます。 loop() 。これは継続的に繰り返し実行され、プログラムの動作と応答を引き起こします。これを使用して、86Duino ハードウェアの動作を制御します。
Loop ブロック

記述は loop()内のみで setup() の内容は記述しません。
Loop と Program ブロックは両方とも開始ブロックであり、セットアップとループプログラムを生成します。 Loop or Program 同時に使用することはできません。そうでない場合はエラーとなります。
3.2.2 一般的なスクリプトブロック

上端と下端は凹面と凸面になっています。
他のスクリプト ブロックと結合できます。

入力値を持つスクリプト ブロック。(以下に赤く囲まれた部分)

一部のブロックは、if ブロックなど、他のスクリプト ブロックを内部的に結合できます。

3.2.3 バリューブロック
5つのタイプがあります:
- 整数
- 小数点付きの浮動小数点数
- string
- 文字 (a、A、B)
- 真偽値 (True、False)
形と色は次のとおりです:

3.3 基本ブロックの紹介

この章では、次の 9 種類のビルディング ブロックに焦点を当てます:
- Control(制御)
- Pins(ピン)
- Tests(テスト)
- Math Operators(計算する)
- Variables/Constants(変数/定数)
- Generic Hardware
- Communication(通信)
- Storage(ストレージ)
- Scoop (Multitasks)
3.3.1 Control(制御)ブロック

制御ブロックは一番上に配置され、プログラミングにおける非常に基本的な構成要素となります。
これらのブロックは、if、loop などの基本的なプログラム ステートメントを決定します。

If ブロック

テスト条件が true の場合、then スクリプトを実行します。
例: デジタルピン 2 が HIGH の場合は、PC シリアル モニターに「ピン 2 は HIGH です」という文字列を出力し、次の手順に進みます。

出力コード:

if/else ブロック

if/elseはifブロックに似ていますが、ifよりもelseスクリプト領域が広くなっています。elseに新しいスクリプトを追加できます。
上記の if ブロックの例に基づくと、次のようになります。

上記の例では、デジタルピンD2がHIGHの場合、PCシリアルモニターに文字列「ピン2はHIGHです」を出力して次のステップに進みます。HIGHでない場合は、PCシリアルモニターに文字列「ピン2はLOWです」を出力して次のステップに進みます。
While ブロック

テスト条件が真かどうかを確認し、真であればコマンド内のスクリプトを実行し、条件が偽になるまでwhileブロックを待機します。テスト条件が最初から真でない場合、スクリプトは実行されません
例 1:

例2:無限ループ。testは常にtrueとなり、スクリプトは常にwhile文で実行されます。必要がない限り、このような書き方は避けてください

do while ブロック

do while は、テスト条件が真であるかどうかを判断する前にスクリプトを 1 回直接実行し、条件が真である場合はスクリプトを再度実行し、真でない場合は do while を終了します。
例:

repeat ブロック

スクリプトを N 回繰り返します。N は入力された整数値によって決まります。
ここで5 回 ほど シリアル出力に “Hello”と出力する例を示します:

repeat and count ブロック

スクリプトをN回繰り返すだけでなく、定義名variablesから実行回数を取得できます。例えば、次の例では1、2、3、4、5が出力されます。

repeat between ブロック

スクリプトを N 回繰り返すだけでなく、開始値 (start)、終了値 (stop)、値の間隔 (steps of) をカスタマイズできます。

例 1: プリント 1, 2, 3, 4, 5.

例 2: プリント 10, 8, 6, 4, 2, 0, -2.

break ブロック

現在のループから抜け出すには、while と repeat の中に break を入れます。通常は if ブロックと一緒に使用します。
例 1: repeat and count ブロック内に break を配置し、1 と 2 のみを出力します。

例 2: while ブロック内に break を配置します。

delay ブロック

この時間遅延ブロックは Arduino でよく使用され、プログラムは待機し続け、何も実行しません。
2 つのタイプがあります。
- Delay Millis: 遅延 N milliseconds。1 秒の場合は 1000 と入力します。
- Delay Micros: 遅延 N microseconds。1 ミリ秒の場合は 1000 と入力します。

Milliseconds ブロック

起動からの経過時間(ミリ秒単位)は、Serial print で出力できます。例を以下に示します。

Milliseconds ブロックを使用すると、待機するだけでなくメッセージを表示するために使用できます。
以下の「go through 3 sec …」は、3 秒ごとに「go through 3 sec …」を出力する例です。

subroutine ブロック

subroutine ブロックはマルチタスク ブロックではないため、呼び出されたときに 1 回だけ実行されます
使用方法:
- スクリプトをcommands内に配置します。
- スクリプトに意味のある名前を付けます
- 意味のある名前でスクリプトを呼び出す

注: プログラムが大きい場合、 subroutine ブロックを使用すると、プログラムがより整理されて理解しやすくなり、次に仕事を引き継ぐ人や、数年後に同じプログラムを確認する人にとっても簡単になります (重要なポイントの 1 つは、名前を付けるときに意味のある名前にする必要があることです)。
3.3.2 Pins ブロック

これらのブロックは、QEC-M-070T/090T/150T のピンを利用するためのものです。
ピンにはデジタル IO とアナログ IO が含まれます。


digital pin ブロック

The digital pin ブロックは指定されたデジタル IO ピンを読み取り、HIGH または LOW を返します。
次のように、さまざまな QEC Mデバイスにデジタル IO ピンがあります。
1. QEC-M-043には3つの外部デジタルIOピンがあります。(下の図の赤い四角でマークされています)

2. QEC-M-070T/090T/150Tには25個の外部デジタルIOピンがあります。(下図の赤い四角でマークされています)

3. QEC-M01には外部デジタルIOピンはありません。
例:

set digital output block

設定されたデジタル出力ブロックは、デジタル出力ピンの HIGH または LOW を設定します。
1. QEC-M-043には3つの外部デジタルIOピンがあります。(下の図の赤い四角でマークされています)

2. QEC-M-070T/090T/150Tには25個の外部デジタルIOピンがあります。(下図の赤い四角でマークされています)

3. QEC-M01には外部デジタルIOピンはありません。
例: D13 ピンの LED を 1 秒ごとに点滅させます。

analog inputブロック

アナログピン N の状態を読み取り、電圧 (0 ~ 3.3V 間) を測定します。解像度は 0 ~ 4095 (3.3 / 4096 = 0.0008 V = 0.8 mV/div) です。
QEC Mデバイスからは、次のアナログ ピンを使用できます。
- QEC-M-043 にはアナログ IO ピンがありません。
- QEC-M-070T/090T/150T には 6 つの外部アナログ IO ピンがあります。

3. QEC-M01にはアナログIOピンがありません。
アナログ入力読み取り例: A0 ピンの電圧を検出し、値が低すぎるか高すぎる場合は警告メッセージを出力します。

set analog outputブロック

Set analog output ブロックはPWMピンを使用してアナログ信号をシミュレートします。N番目のPWMピンの番号を0〜1024の間で設定できます。これは0%〜100%に相当します。
これは、次に示すように、PWM 出力機能を持つピンにのみ使用できます。

アナログ出力を設定するための書き込み例: ピン D13 はデジタル ピンであり、PWM ピンでもあるため、これを使用して LED の明るさを微調整できます。

input pullupブロック

input pullupブロックはdigital pinブロックに似ていますが、このピンはCPUの内部プルアップ抵抗にリンクされるという点が異なります。つまり、ピンが接続されていない場合(トライステート)、読み取り値はHIGHになります(内部プルアップのため)。
toggle digital pin ブロック

トグルデジタルピンブロックはデジタル出力ブロックに似ていますが、そのデジタルピンの状態が反転して設定される点が異なります。まず状態を読み取り、反転させてから、元に戻します。
例:
- ピンが LOW の場合、トグル デジタル ピン ブロックを使用した後、ピンは HIGH になります。
- ピンが HIGH の場合、トグル デジタル ピン ブロックを使用した後、ピンは LOW になります。
tone ブロック

上記の最初のtoneブロックは、デジタル ピンがブザーに接続されている場合に、ド、レ、ミなどの音を生成するために使用できます。
上記の 2 番目の tone ブロックには、追加の milliseconds が含まれており、サウンドの持続時間を設定できます。
例 1: ピン 8 は 440 Hz のトーンを継続的に生成します。

例 3: 2 つ以上のトーン ブロックを使用する必要がある曲を作曲したい場合はどうすればよいでしょうか?
誤り:

正しくは:

注意: 遅延ブロックを使用するとプログラムがフリーズします。SCoop (マルチタスク) ブロックを使用するのが解決策であり、別の章で後ほど説明します。
例 4: 内蔵ブザーを使用して音を生成します。
ピン250は、次の例に示すように、内蔵ブザーです。

注意: QEC では、内蔵ブザーを使用して音を生成すると、同じ音が同時にオーディオ出力にも出力されます。
no tone ブロック

The no Tone ブロックはブザーピンからの音を直ちに停止します。
no tone ブロックの例: 内蔵ブザーは 440 Hz の音を 500 ミリ秒間生成し、その後停止します。

cpuTemperature ブロック

The cpuTemperature ブロックはVortex86EX2 CPUの温度を読み取ることができます。
cpuTemperature ブロックの例: CPU の温度を出力します。

3.3.3 Logic ブロック

論理構成要素は、計算、整数、浮動小数点数、文字列、文字の比較に使用されます。プログラムでは、論理計算に and 、 or 、 not を使用するのが一般的です。

値ブロックには 5 つの種類があり、対応する形状と色は次のとおりです。
- 整数
- 浮動小数点数(小数点付き)
- string
- 文字
- 真偽値

数値比較ブロック

上記の赤い丸は、以下の順序で表示されます。
- より大きい
- より少ない
- 等しい
- 以上
- 以下
- 等しくない
数値比較の例:

真偽比較ブロック

上記の赤い丸は、以下の順序で表示されます。
- 等しい
- 等しくない
真偽比較例:

文字比較ブロック

上記の赤い丸は、以下の順序で表示されます。
- 等しい
- 等しくない
例: EtherCAT キーパッドで押されたボタンが A の場合、「get A」という文字列を出力します。


文字列比較ブロック

上記の赤い丸は、以下の順序で表示されます。
- 左の文字列は右の文字列と等しい
- 左の文字列は右の文字列と等しくない
注意: 大文字と小文字は異なります。
例: get TextInput からの入力が「Text」かどうかを判断し、そうであれば「is same」と出力します。

論理計算 ー andブロック

and ブロックには 2 つの入力と 1 つの出力があり、入力/出力の真偽値は次の表のようになります。

例: 「ピン 2 が HIGH」かつ「シリアル受信データがある」の両方が true の場合、「OK」と出力します。

論理計算 – orブロック

The or ブロックには 2 つの入力と 1 つの出力があり、入力/出力の真偽値は次の表のようになります。

例: 「ピン 2 が HIGH」または「シリアル受信データがある」のいずれかが true の場合、「OK」を出力します。

論理計算 ー notブロック

The not ブロックには 1 つの入力と 1 つの出力があり、入力/出力の真偽値は次のとおりです。

例: シリアル にデータがない場合、「Empty」という文字列を出力します。

論理計算 ー is emptyブロック

is empty ブロックは文字列が空かどうかを判断します。空文字列の場合はTrue、そうでない場合はFalseを返します。
例: TextInput 入力が空の文字列かどうかを判断します。空の文字列の場合は、「This is empty string」と出力します。

論理計算 ー tolntブロック

toInt ブロックは、文字列を数値に変換した後の結果を比較するためのもので、入力が 2 つ、出力が 1 つあります。
- 入力 1: 比較する文字列。この文字列は数値に変換されます。
- 入力2: 比較する数値
- 出力: True/False
例:HMIからのTextInput文字列が、テキストを数値に変換した後のNumberInputの数値と等しいかどうかを判断し、等しい場合は「is same」と出力します。

3.3.4 演算ブロック

演算ブロックは、算術、三角関数、値のマッピングなどの基本的な計算によく使用されます。

加算 +、減算 -、乗算 x、除算 ÷ ブロック

基本的な演算ブロックは、整数と浮動小数点数の両方に対応しています。
例: バーの値が 100 で割った後に 30 未満になる場合は、「too low」と出力されます。

除算残り % ブロック

除算残りブロック % は、数値を割った後の余りを得るものです。以下の例 30 % 8 は、30 を 8 で割ると 3 、余り 6 になることを意味します。
以下のように、30=(8×3)+6、30=(10×3)+0、30=(9×3)+3で、余りは6、0、3です。

例: バーを 30 で割った余りが 20 より大きい場合は「too high」と出力され、10 未満の場合は「too low」と出力されます。

absブロック

abs ブロックは絶対値を取り、負の値を正の値に変換し、正の値を維持します。
例: バーの絶対値を出力します。

powerブロック

powerブロックは、X を Y で累乗します。ここで、X は底、Y は指数です。

例:

平方根(sqrt)と三角関数(sin、cos、tan)ブロック

例:

randomブロック

randomブロックは指定された範囲内で乱数を取得します

例: 10 ~ 30 の間の乱数を取得します。

randomSeedブロック

乱数ブロックの例では、生成される乱数列は11、25、22、18、12、29…と仮定します。ハードウェアを再起動してプログラムを再度実行すると、11、25、22、18、12、29…(同じ列)が返されます。これは、結果の列が「疑似乱数生成器」によって生成されたためです。シードの値が変化しない限り、列は同じになります。
randomSeed例: 起動するたびに異なるシーケンスを取得するには、randomSeed に毎回異なる値を指定します。

mapブロック

map ブロックは数値マッピングであり、現在の入力値を現在の範囲から別の範囲にマップし、その範囲内の対応する値を等しい割合で取得できます。

512は0~1023の50%、0~255の50%は127です。
map ブロック範囲の下限は、範囲の上限よりも高くても低くてもよいため、範囲内の値を反転するためにも使用できます。たとえば、次の例では 18 になります。

負の数も処理できます。たとえば、次の例では -18 になります。

注: 内部的には整数演算が使用され、小数点は存在せず、小数部分は丸められるのではなく破棄されます。
constrainブロック

constrainブロックは特定の値に制限されます、例えば

3.3.5 Variables/Constants ブロック

Variables/Constants(変数/定数)は、真偽値、数値、浮動小数点数などの変数と定数の設定によく使用されます。


Integer variable ブロック

次のように変数を使用して値を保存します。

名前が「Integer」、初期値が「10」の変数を作成します。
スクリプトの最初のブロックでは変数と割り当てが自動的に作成され、2 番目のブロックでは値の割り当てのみが行われますが、変数は作成されません。
例:

floatブロック(32ビット浮動小数点変数)

32 ビット浮動小数点変数ブロックは、整数ブロックと同じように使用されます。

Unsigned_longブロック

整数変数ブロックの範囲は -2,147,483,648 ~ 2,147,483,647 です。
unsigned_long の範囲は 0 ~ 4,294,967,295 です
残りの使用方法は整数変数ブロックと同じです。
Bool(真偽)ブロック

Boolブロックは整数ブロックと同じように使用されます。

64ビット浮動小数点変数ブロック

64ビット浮動小数点変数ブロックは、より高い精度を実現する浮動小数点演算です。使い方は整数ブロックと同じです。

set char variable ブロック

set character variableブロックの設定はintejerブロックと同じように使用します。

set String variable ブロック

set String variableブロックの設定はintegerブロックと同じように使用します。

create an array ブロック

create an array blockブロックを作成するには、値の組み合わせが必要です。以下は、サイズが 3 の「Table」という配列を作成して名前を付ける例です。

「Table」配列を位置 1、2、3 の順に指定すると、初期値は 1、5、10 になります。

配列から値を取得します。

配列変数ブロックの例。

定数ブロック

- D0ブロック: デジタルピン、0~31のオプション
- A0ブロック:アナログピン、0~11のオプション
- D3ブロック: PWMピン、3、5、6、9、10、11、13から選択可能
3.3.6 General Hardwareブロック

一般的なハードウェア ブロックは、サーボ モーターやステッピング モーターなどの一般的なハードウェア セットアップに共通です。
ブロックには次の種類があります。
- サーボ: デフォルト
- ステッピングモーター

サーボモーター(デフォルト、SG90、MG996GR)ブロック

サーボ モーター (サーボ: デフォルト) ブロックは、RC サーボ モーターを 0 ~ 180 度の間で回転させることができます。
例:

サーボ ブロックは、SG-90 および MG996R サーボ モーターもサポートします。

例: サーボ モーターは 0 度から 180 度まで回転し、その後 180 度から 0 度まで回転します。

ステッピングモーターブロック

ステッピングモーターブロックを使用するには、外部ドライバが必要です。仕様は以下の通りです。
- ドライバ:ULN2003
- ステッピングモーター:28BYJ-48
接続例:

例:

3.3.7 通信ブロック
通信ブロックは、シリアル、グルー、I2C などの通信機能によく使用されます。
ビルディング ブロックには次の種類があります。

シリアル通信ブロック – シリアルプリント、メッセージ、グルー

これらのブロックは、QEC から PC の USB ポートへの通信を作成するためのもので、次のものが含まれます。
- 上部の赤い丸で囲まれた部分がデータ転送ブロックです。
- 下の赤丸で囲った部分がデータ受信ブロックです。
例 1: データを転送し、「message」と A0 ピンおよび D2 ピンの値も出力します。

シリアル通信ブロック – シリアルデータ利用可能、シリアル読み取り

シリアルデータ使用可能ブロックの説明:
- 最初のブロックは、読み取り可能な値があるかどうかを示す真偽値を返します
- 2 番目のブロックは、読み取ることができる値の数を表す整数を返します。
シリアル読み取りの説明: 1 バイトを読み取ります。
- 読み取る値がない場合、ブロックは -1 で返されます。
例 2: 読み取り可能な値がある場合は、1 バイトを読み取って出力します。

例 3: 読み取ることができる値が 3 つある場合は、3 バイトすべてを読み取り、出力します。

シリアル通信ブロック – シリアルパーセント

serial parseInt ブロックは、外部から入力されるシリアル データから次の利用可能な整数を見つけます。
例: 読み取れる値がある場合は、それを読み取って整数として出力します。たとえば、
渡された文字列が qwe548tt26rrr の場合、数値 548 が取得されます。

I2C communicationブロック

データはシリアル通信に似ていますが、さらに 2 つのパラメータがあり、センサーから QEC に送信されます。
- デバイスアドレス: センサーの一意のアドレス
- レジスタアドレス: センサーの内部レジスタのアドレス (ユーザーはI2Cデバイスの基本を理解している必要があります。ArduinoのWebサイトを参照することをお勧めします。 https://docs.arduino.cc/learn/communication/wire).
例: デバイス アドレス 12 のレジスタ 0 から 100 を書き込み、次に同じデバイスのレジスタ 9 から 1 バイトを読み取って出力します。

3.3.8 Storage ブロック

ストレージ ブロックは、EEPROM や SD カードなどのフラッシュ メモリからデータにアクセスするためのものです。
ビルディング ブロックには次の種類があります。

EEPROM ブロック

EEPROM ブロックは主に EEPROM からのデータの読み取り/書き込みに使用されます。
2バイトのデータ読み取り/書き込み

2バイトのデータの書き込み/読み取り、例:

100 のデータをアドレス 1 に書き込み、読み戻して出力します (値の範囲: -32768 ~ 32767)。
4バイトのデータの読み取り/書き込み

4 バイトのデータの読み取り/書き込み。範囲は -2,147,483,648 ~ 2,147,483,647 です。
使用方法は前の例と同じですが、値が大きくなるため、より多くのバイトが必要になります。
1バイトのデータの読み取り/書き込み

使用方法は前の例と同じです。
SD card ブロック

SD カードにファイルを書き込みます。たとえば、SD カードに file.txt ファイルを作成し、「Hello, world」という文字列を書き込みます (ファイルが既に存在する場合は、クリアされて書き換えられます)。

3.3.9 SCoop (Multitask) ブロック

Scoop は半手動のマルチタスク ブロックです。
利点:
- マルチタスクで遅延を使用するとスタックすることなく実行できます
- バックグラウンドでマルチタスクをオンにして、自動的に実行することができます。
サブプログラムブロックは呼び出されたときにのみ実行されますが、マルチタスクは呼び出されることなくバックグラウンドで実行されます。
原理:
- 遅延/スリープを使用して次のタスクにジャンプします
ブロックには次の種類があります。

Scoop Task ブロック

Scoop タスク ブロックは、プログラム ブロックと同様に、新しいタスクを開くことができます。
複数のタスクを開くことができます。例:

Scoop loop ブロック

Scoopループブロックは、ループブロックと同様にループタスクを作成するために使用できます。複数のタスクを開くことができます。例:

前のトーンブロックの例:
前のトーンの例では、遅延を使用するとプログラムが停止しましたが、ここでは SCoop Loop を使用してスクリプトを書き換えます。以下のように、プログラムは停止せず、バックグラウンドでトーンをループ再生します。

Scoop Sleep ブロック

SCoop Sleepブロックには遅延ブロックと同様の機能があり、一定時間遅延してから次のタスクにジャンプします。
以下は 3 つの SCoop Loop タスクの例です。最初の実行後、経過時間が割り当てられた遅延時間を超えない場合は次の実行に進みます。それ以外の場合は、現在のタスクから続行されます。

Scoop Event ブロック

Scoop Evnet ブロックは、ピン番号のデジタル ピンのステータスがイベントとして変更された場合にタスクを実行します。
例えば、ピン 1 が LOW から HIGH に変わると、「Task」と印刷されます。

Event ブロック

Eventには以下の5種類があります。

注: マルチタスク ブロックでは、以下の 2 つの方法で次のタスクに切り替えます。
- ユーザーが積極的に遅延/スリープを呼び出す
- タスクが終了するまで、ユーザーはdelay/sleep関数を呼び出しません。その後、ライブラリは自動的に次のタスク(ユーザーには見えません)にジャンプする関数を呼び出します。
完全に自動ではないため、「半手動」マルチタスクと呼ばれます。以下の例を使用しても、やはり行き詰まる可能性があります。

何故ならタスクは終了しておらず、遅延/スリープも呼び出されていないためです。
86DuinoリファレンスのテキストはArduinoリファレンスの改変版であり、クリエイティブ・コモンズ表示-継承3.0ライセンスの下で提供されています。リファレンス内のコードサンプルはシリアル通信ブロック – シリアルデータ利用可能、シリアル読み取りパブリックドメインに公開されます。