
概述
在买实物元器件之前,我想先在仿真里验证多通道 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 做概念验证没问题,但它不是人类思考颜色的方式。等做实体版的时候我应该会重新设计这一块。
结果
Tinkercad 仿真在实际花钱买元件之前就验证了方案的可行性:
- 三条独立 LED 灯带,各自在内存中保存状态。切到别的通道后,之前的颜色纹丝不动。
- 按钮切换通道,去抖正常(说实话,Tinkercad 的虚拟按钮比真实按钮干净多了)。
- 四个电位器实时控制 RGB + 亮度。从 0-1023 到 0-255 的 ADC 映射就是简单除法,但对于仿真验证来说够用了。
- 状态指示灯提供清晰的视觉反馈,告诉你当前在编辑哪个通道。小细节,但让整个操作界面从“盲猜”变成了“有底”。
