
概述
在买实物元器件之前,我想先在仿真里验证多通道 LED 控制器的逻辑。Tinkercad Circuits 做这种原型验证意外地好用;给你虚拟的 Arduino、NeoPixel 灯带、电位器、按钮,连串口监视器都有,完全不用碰烙铁。
这个电路控制三条独立的 NeoPixel 灯带。三个按钮用来选择当前要编辑的灯带,四个电位器负责调色:三个管 RGB,一个管总亮度。选中的灯带实时更新,其他两条保持上次的状态不变。旁边还有一个小的状态指示灯,颜色跟当前选中通道对应;扫一眼就知道在编辑第几路。
控制面板
- 3 个按钮;选择当前灯带(1、2、3)。按下后切换当前编辑的通道,同时更新状态指示灯的颜色。
- 3 个电位器;R、G、B 数值从 0-1023(analogRead)映射到 0-255,供 NeoPixel 输出。
- 1 个电位器;当前灯带的总亮度。RGB 值算好之后,作为缩放系数乘上去。
- 状态 RGB LED;发红光、绿光或蓝光来指示当前选中的通道。很简单但很实用;不用看串口监视器就知道在编辑哪一路。
代码结构
struct LightState {
int r, g, b, brightness;
};
LightState lights[3]; // 每条灯带独立状态
void loop() {
// 读取按钮 → 切换灯条
// 读取电位器 → 更新当前灯条 RGB + 亮度
// 应用:输出 = 基础色 × 亮度 / 255
// 更新状态 LED 颜色
}
亮度缩放的公式 输出 = 基础色 × 亮度 / 255 比较直接;按比例降低每个通道的亮度而不会偏移色相。这一点其实比看起来重要;如果只是粗暴地截断原始值,低亮度时颜色会明显偏掉。
后续思考
将来用实体旋钮操控时,换成 HSV(色相、饱和度、明度)控制可能比 RGB 更直观。HSV 模式下亮度旋钮直接对应 V 分量,符合直觉;三个颜色旋钮则分别管色相、饱和度和白平衡(色温)。RGB 做概念验证没问题,但人脑对颜色的理解方式和 RGB 不一样。等做实体版的时候我应该会重新设计这一块。
结果
Tinkercad 仿真在实际花钱买元件之前就验证了方案的可行性:
- 三条独立 LED 灯带,各自在内存中保存状态。切到别的通道后,之前的颜色纹丝不动。
- 按钮切换通道,去抖正常(说实话,Tinkercad 的虚拟按钮比真实按钮干净多了)。
- 四个电位器实时控制 RGB + 亮度。从 0-1023 到 0-255 的 ADC 映射就是简单除法,但对于仿真验证来说够用了。
- 状态指示灯提供清晰的视觉反馈,告诉你当前在编辑哪个通道。小细节,但让整个操作界面从“盲猜”变成了“有底”。
