RGB红绿灯——Arduino

光的三原色

        牛顿发现光的色散奥秘之后,进一步计算发现:七种色光中只有红、绿、蓝三种色光无法被分解,而其他四种颜色的光均可由这三种色光以不同比例相合而成。于是红、绿、蓝被称为“三原色光”或“光的三原色”。后经证实:红、绿、蓝这三种颜色的组合,几乎能形成所有的颜色。

        组合   红+绿=黄;   绿+蓝=青;   红+蓝=品红;   红+绿+蓝=白

RGB彩灯

RGB彩灯内部原理

                  共阳极                                                     共阴极

              

共阴极彩灯电路接线

RGB红绿灯

功能需求:红灯亮7秒,绿灯亮7秒,黄灯闪烁3秒(闪烁间隔为500毫秒)。

void setup(){

}

void loop(){
  analogWrite(9,255);
  analogWrite(10,0);
  analogWrite(11,0);
  delay(7000);
  analogWrite(9,0);
  analogWrite(10,255);
  analogWrite(11,0);
  delay(7000);
  for (int i = 1; i <= 3; i = i + (1)) {
    analogWrite(9,255);
    analogWrite(10,255);
    analogWrite(11,0);
    delay(500);
    analogWrite(9,0);
    analogWrite(10,0);
    analogWrite(11,0);
    delay(500);
  }

}

用3个电位器,对RGB彩灯进行调色。

volatile int dwq1;
volatile int dwq2;
volatile int dwq3;

void setup(){
  dwq1 = 0;
  dwq2 = 0;
  dwq3 = 0;
}

void loop(){
  dwq1 = (map(analogRead(A1), 0, 1023, 0, 255));
  dwq2 = (map(analogRead(A2), 0, 1023, 0, 255));
  dwq3 = (map(analogRead(A3), 0, 1023, 0, 255));
  analogWrite(9,dwq1);
  analogWrite(10,dwq2);
  analogWrite(11,dwq3);

}

        这段代码是一个基于Arduino的简单示例,用于实时处理来自三个ADC输入(A1, A2, A3)的模拟信号,并将其转换为0到255范围内的数字值,再通过PWM控制RGB三色LED灯(连接到数字引脚9、10和11)。`volatile`关键字在此处的作用非常重要,因为它确保了在多任务环境中,CPU不会优化对这三个变量(dwq1, dwq2, dwq3)的访问,防止可能出现的数据竞争(data race)问题。

以下是代码逐行解释:

1. `volatile int dwq1;`,`volatile int dwq2;` 和 `volatile int dwq3;`:声明了三个名为`dwq1`、`dwq2`和`dwq3`的整型变量,因为它们存储的是从ADC读取的结果,这些值可能会随着外部输入的变化而随时改变,所以标记为volatile,表示编译器在每次读取时都需要重新检查该变量的值。

2. 在`setup()`函数中:
   - `dwq1 = 0;`:初始化`dwq1`为0,相当于清零准备接收ADC的读数。
   - 同理,`dwq2`和`dwq3`也被初始化为0。
   
3. 在`loop()`函数中:
   - `dwq1 = (map(analogRead(A1), 0, 1023, 0, 255));`: 从ADC引脚A1获取模拟电压值,映射到0到255的整数值。`map()`函数用于线性变换,将原范围的值缩放到目标范围。
   - 类似地,`dwq2`和`dwq3`分别对应A2和A3的ADC读数。
   
4. 最后,通过`analogWrite(9, dwq1);`、`analogWrite(10, dwq2);`和`analogWrite(11, dwq3);`将每个`dwq`变量的值分配给RGB LED的PWM输出,控制LED的颜色强度。

  • 11
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌你一颗小芯芯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值