コントロールリファレンス
chip.json の controls 配列は、シミュレーション実行中にパネルに表示される内容を記述します。各エントリは、name がエントリの id と一致する属性を駆動します。
エントリのフィールド
Section titled “エントリのフィールド”| フィールド | 適用対象 | 意味 |
|---|---|---|
id |
すべて | 必須。 このコントロールが駆動する属性。id のないエントリはスキップされます |
type |
すべて | スライダーの場合は "range"、モーメンタリトリガーの場合は "button"。その他の値は無視され、エントリは何も生成しません |
label |
すべて | コントロールの横に表示されるテキスト。属性の label にフォールバックし、次に id にフォールバックします |
min |
range | 下限値。属性の min にフォールバックし、次に 0 にフォールバックします |
max |
range | 上限値。属性の max にフォールバックし、次に 100 にフォールバックします |
step |
range | 増分。属性の step にフォールバックし、スパンが20より広い場合は 1、それ以外の場合は 0.01 にフォールバックします |
unit |
range | 値の後に表示されます。例:ppm や %。デフォルトでは空です |
scale |
range | "log" は対数スライダーになります。曲線が未定義のため、min が負の場合は無視されます |
スライダーの初期位置はコントロールから取得されません。属性の default から取得され、min にフォールバックします。属性の default をコントロールの範囲内に保つか、そうしないとパネルが開いたときにハンドルが一端に固定されます。
パネルのタイトル
Section titled “パネルのタイトル”チップの name から取得されます。name のないチップには「Custom Chip」と表示されます。
自動フォールバック
Section titled “自動フォールバック”controls を記述する必要はまったくありません。
min と max の両方を宣言し、明示的なコントロールがまだ要求していない属性には、スライダーが自動的に付与されます。 そのラベルは属性の label から、ステップは属性の step から取得されるか、推論されます:type: "int" の場合は 1、それ以外の場合はスパンが20より広いと 1、そうでない場合は 0.01 です。単位は付きません。
つまり、controls はスライダーの名前変更、単位の追加、対数化、またはボタンの宣言にのみ必要です。実際的な結果は2つあります:
- ライブコントロールが存在する前に書かれたチップは、多くの場合、編集なしですでに調整可能です。
- 属性に
min/maxがなく、controlsセクションもないチップは、パネルがまったく表示されません。これが、チップをクリックしても何も起こらないように見える通常の理由です。
"button" エントリは、リセットライン、「モーションのシミュレート」スタイルのイベント、およびレベルではなくエッジであるその他すべてのためのモーメンタリトリガーをレンダリングします:
押すと、属性が 1 になり、約150ミリ秒後に 0 に戻ります。そのため、チップは特定の瞬間を捉えようとするのではなく、非ゼロの読み取り値を「イベントが発生した」として扱う必要があります。
値の保存場所
Section titled “値の保存場所”スライダーの位置は、操作を停止してから約250ミリ秒後に、コンポーネントの保存済みプロパティ(attrs 内)にミラーリングされ、保留中の値がマージされます。そのため、スライダーをドラッグしてもプロジェクトに毎ピクセル書き込まれるわけではなく、保存して再読み込みしても位置が維持される理由でもあります。
ミラーはコピーです。実行中のチップが読み取る値は、コントロールが動いた瞬間に適用されるライブの値です。
| エンジン | 値の到達方法 |
|---|---|
| AVR、RP2040、ブラウザ内ESP32 | WebAssemblyが vx_attr_read のたびに読み取る属性ストアに直接書き込まれます |
| QEMUバックエンド上のESP32 | ワーカーに転送され、そこにあるチップランタイムの属性ストアに適用されます |
どちらもライブです:再コンパイル、再起動、「適用」ボタンは不要です。唯一のレイテンシは、独自のコードが vx_attr_read を呼び出す頻度です。
ライブコントロールは、すべてのプランで無料です。それらを宣言するチップの書き込み、コンパイル、実行も同様です。隣接する2つの機能は有料です:AIにチップまたはセンサーを作成してもらうこと(Maker以上)、およびサーバー上にチップを保持してプロジェクト間で再利用するための My Chips ライブラリ(Pro)。
コントロールが機能しない場合
Section titled “コントロールが機能しない場合”| 症状 | 原因 |
|---|---|
| チップをクリックしてもパネルが開かない | controls エントリがなく、min と max の両方を持つ属性もない、またはシミュレーションが停止している |
| 特定のエントリがパネルにない | その type が range でも button でもない、または id がない |
| スライダーは動くが何も変わらない | チップが vx_attr_read を値が使用される場所で呼び出す代わりにキャッシュした |
| スライダーが間違った端から始まる | 属性の default がコントロールの min/max の範囲外にある |
| 値が整数でジャンプする | スパンが20より広いため step が 1 と推論された;step を明示的に設定する |
| 対数スライダーが線形である | min が負の場合、scale: "log" は無視される |
- チュートリアル:アナログCO2センサー
- チュートリアル:I2C経由の温度と湿度
- カスタムチップAPIリファレンス
- ここにあるすべてのフィールドの実行例:ボタン、対数スライダー、SPI および UART センサー