可编程传感器
可编程传感器是一种普通的自定义芯片,其读数由您在仿真运行期间通过滑块驱动。一个CO2传感器,您通过扫描其ppm值来测试报警阈值。一个温度探头,您将其推过85摄氏度以观察固件的反应。一个您手动调暗的光线传感器。
芯片本身没有任何变化:它是在入门指南中描述的同一个WebAssembly组件。本页新增的内容是将滑块值传入已运行芯片的线路,无需重新编译或重启任何内容。
约定,分三部分
Section titled “约定,分三部分”每个可编程传感器都由以下三部分组成,仅此而已。
1. 一个属性 保存可调值。
S.ppm = vx_attr_register("ppm", 1000);2. chip.json 中的 controls 条目 在屏幕上放置一个滑块。它通过相同的id来寻址该属性:
"controls": [ { "id": "ppm", "label": "CO2 (ppm)", "type": "range", "min": 400, "max": 5000, "step": 10, "unit": "ppm" }]3. 您的代码在每次需要该值时重新读取属性:
double ppm = vx_attr_read(S.ppm); /* 当前滑块的值 */按下 Run(运行),点击芯片,将打开以下界面:

第三点是容易出错的地方。如果在chip_setup()中只读取一次属性并将其缓存在变量中,滑块会出现、移动,但完全不起作用。vx_attr_read开销很小;请在定时器回调、I2C读取处理程序或任何实际需要该值的地方调用它。
值如何到达您的芯片
Section titled “值如何到达您的芯片”这一点值得理解,因为两种仿真引擎采用不同的路径,故障模式也不同。
| 步骤 | 发生什么 |
|---|---|
| 您拖动滑块 | 面板写入传感器更新注册表,以该芯片实例为键 |
| 浏览器引擎(AVR、RP2040、浏览器内ESP32) | 该值直接写入属性映射,正在运行的WebAssembly在每次vx_attr_read时读取该映射。无需消息传递,无需重启 |
| QEMU下的ESP32 | 芯片位于工作线程中,因此该值作为属性更新转发给它并在那里应用 |
| 每250毫秒静默期 | 最后的值被镜像到组件的已保存属性中,因此滑块位置在保存和重新加载后得以保留 |
有两个值得了解的后果:
- 没有“应用”步骤。 下一次
vx_attr_read将返回新值。如果您的芯片每秒只读取一次属性,那么滑块需要那么长时间才能产生可见效果。 - 面板是每个实例独立的。 画布上同一芯片的两个副本具有独立的滑块,因为控件是根据每个实例自身的清单合成的。
设计时默认值与实时值
Section titled “设计时默认值与实时值”它们是不同的界面,人们常常混淆:
- 停止状态:右键单击芯片以打开部件检查器。您在此处设置的是属性的已保存默认值,即芯片启动时的值。
- 运行状态:单击芯片。滑块面板打开。您在此处设置的是实时值,立即生效。
每种模式在示例库中都有一个可运行的电路。按下 Run(运行),然后点击芯片:
| 示例 | 它教授的内容 |
|---|---|
| CO2传感器(实时滑块) | 模拟配方:滑块到电压再到analogRead |
| I2C环境传感器(实时滑块) | 位于0x44寄存器映射后的两个滑块 |
| 运动传感器(模拟按钮) | button控件:瞬时触发加保持滑块 |
| 夜灯(对数勒克斯滑块) | scale: "log":一个滑块上跨越五个数量级的勒克斯值,低于50 lx时灯触发 |
| SPI温度计(实时滑块) | SPI从机时序:在CS下降沿锁存 |
| UART空气传感器(实时滑块) | 推式串行传感器接入SoftwareSerial |
- 教程:模拟CO2传感器
— 最短的完整示例,从空芯片到
analogRead跟踪滑块。 - 教程:通过I2C传输温度和湿度 — 适用于任何数字协议传感器的模式,带有两个滑块和寄存器映射。
controls参考 — 每个字段、自动回退规则,以及滑块无响应时应检查的内容。