rgb灯珠控制电路rgb珠子电压)
arduino学习笔记12-彩色灯制作
牛顿发现光的颜色的奥义,经过系统的观察和研究实验,最终确认:一束白光通过棱镜,它经过两次折射,结果白光被分解成规则的七种颜色的光线。牛顿计算得出的结论是,7色光中只有红、绿、蓝三色光不能分解,不能称之为合成。其它四个色光可以以不同的比例匹配这三个色光。于是红色、绿色、蓝色被称为“三原色光”或“色光三原色”。
每个颜色被分成256个部分,从0到255分别表示该光的光强度。当不同光强度的光混合时,组合了256*256*256=1677216种。例如,红色(255255255)、白色(255255)。RGB LED只是简单地将3种颜色led的灯装入一个led。可以作为三个灯使用。在arduino中,通过用pWM端口调整3色led的阴影,可以调整led任意的颜色。
一、实验现象
串行端口控制开关灯RGB LED调整灯的颜色,输入o时点亮,输入c时熄灭,当灯点亮时输入r120g130b50led输出对应的亮度。
二、实验器材:控制板、RGB LED1个、3个电阻、面包板和杜邦线。
三、实验中使用的函数和句子
像if语句那样,switch。。case允许在不同条件下执行不同的动作。特别是,一个switch语句将一个变量的值与case语句指定的值进行比较。如果发现任意一个case语句与变量值一致。此case语句下的代码被执行。关键字breakswitch用于中止和跳过句子段。在各case句的末尾经常使用。如果没有break语句,switch语句将继续执行下一个公式(“持续下降”),直到遇到break或switch句末直接执行。
语法
switch (var) {
case label:
//语句
break;//请不要掉下来。否则,将向下执行。
case label:
//语句
break;
default:
//语句
}
四、实验电路
五、写代码
串行端口输入格式:o(open),cclose,r120g130b50
int rled=0;//红绿蓝led输出初始值0
int gled=0;
int bled=0;
char kg=#39;c#39;;//led灯开关、c(close熄灭、o(open)点亮
void setup() {
//put your setup code here, to run once:
pinMode(11,OUTPUT);//设定端口号模式
pinMode(10,OUTPUT);
pinMode(9,OUTPUT);
Serial.begin(9600);//串行端口
}
void loop() {
//put your main code here, to run repeatedly:
if(Serial.available()gt;0){
char sta=Serial.read();//读取第一个字符
if (sta==#39;o#39; )//开灯的话
ledcmd(cx); //调用函数ledcmd()参数是sta
}else if(sta==#39;c#39;)//如果关灯的话
kg=#39;c#39;; //将切换模式设为cclose
analogWrite(11,0);//以下是熄灯文
delay(100);
analogWrite(10,0);
delay(100);
analogWrite(9,0);
delay(100);
Serial.flush(); //删除缓存中的数据
}else if(kg==#39;o#39;)//灯亮着的话
ledcmd(cx);
}
}
delay(50);
}
voidledcmdchar cx{//函数ledcmd(、参数cx是字符类型
switch(cx){
case #39;o#39;: //输入点亮命令后
kg=#39;o#39;; //把灯的模式设为o(open)
rled=100;
gled=100;
bled=100;
break;
case #39;r#39;: //红色的话
rled=Serial.parseInt();//读出红色的数值,以下相同
break;
case #39;g#39;:
gled=Serial.parseInt();
break;
case #39;b#39;:
bled=Serial.parseInt();
break;
}
analogWrite(11,rled);//输出红色值
delay(100);
analogWrite(10,gled);
delay(100);
analogWrite(9,bled);
delay(100);
}