跳转到内容

控件参考

chip.json 中的 controls 数组描述了仿真运行期间面板显示的内容。每个条目驱动其 name 与该条目 id 匹配的属性。

字段 适用范围 含义
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 保持在控件的范围内,否则面板打开时手柄会卡在一端。

取自芯片的 name。没有 name 的芯片显示“Custom Chip”。

您完全不必编写 controls。

任何同时声明了 min 和 max、且没有显式控件声明的属性,都会自动获得一个滑块。 其标签来自属性的 label,步长来自属性的 step,或按以下方式推断:对于 type: "int" 为 1,否则当跨度大于 20 时为 1,否则为 0.01。它没有单位。

因此,只有在需要重命名滑块、添加单位、使其成为对数滑块或声明按钮时,才需要 controls。这带来两个实际后果:

  • 在实时控件出现之前编写的芯片通常无需编辑即可进行调节。
  • 属性没有 min/max 且没有 controls 部分的芯片完全不显示面板。这通常是点击芯片似乎没有任何反应的常见原因。

"button" 条目为复位线、“模拟运动”类事件以及任何其他边沿而非电平的事件提供瞬时触发器:

运动传感器面板上的按钮控件和保持时间滑块 按下它会将属性驱动到 1,约 150 毫秒后回到 0,因此您的芯片应将非零读取视为“事件已发生”,而不是试图捕捉特定瞬间。

滑块位置会在您停止移动约 250 毫秒后镜像到组件的已保存属性(在 attrs 下),并合并待处理的值。这就是为什么拖动滑块不会在每个像素上都写入项目,以及为什么该位置在保存和重新加载后仍然存在。

镜像是一个副本。运行中的芯片读取的值是实时值,在控件移动的瞬间即被应用。

引擎 值的到达方式
AVR、RP2040、浏览器内 ESP32 直接写入 WebAssembly 在每次 vx_attr_read 时读取的属性存储
QEMU 后端上的 ESP32 转发到工作线程,并在那里应用于芯片运行时的属性存储

两者都是实时的:无需重新编译、无需重启、无需“应用”按钮。唯一的延迟是您自己的代码调用 vx_attr_read 的频率。

实时控件在所有计划上都是免费的,编写、编译和运行声明它们的芯片也是如此。两个相邻功能是付费的:让 AI 为您编写芯片或传感器(Maker 及以上计划),以及 My Chips 库(Pro 计划),该库将芯片保存在服务器上以便跨项目复用。

症状 原因
点击芯片不打开面板 没有 controls 条目,也没有同时具有 min 和 max 的属性,或者仿真已停止
面板中缺少特定条目 其 type 既不是 range 也不是 button,或者没有 id
滑块移动但没有任何变化 芯片缓存了 vx_attr_read,而不是在使用值的位置调用它
滑块起始位置错误 属性的 default 在控件的 min/max 之外
数值以整数跳变 由于跨度大于 20,step 被推断为 1;请显式设置 step
对数滑块是线性的 当 min 为负数时,scale: "log" 被忽略