原理
RGB灯一共四个接口,除去一个GND接口,余下三个接口分别对应红绿蓝三色,因此将三个接口分别连接三个不同的模拟口上进行PWM调光。
PWM调光
PWM是指脉冲宽度调制,用这种方式达到模拟值输出的效果函数为:
analogWrite(pin,value);
pin为引脚,value为应输出的值。PWM会使引脚产生一个高低电平不断变化的一个固定周期(490Hz)的方波。
具体代码
A、B、C代表三个颜色,数字代表PWM的输出值通过这些来达到不同颜色的效果。
//rgb调光
int i;
String instring="";
char LED="";
boolean stringcomplete=false;
void setup(){
Serial.begin(9600);
}
void loop(){
if(stringcomplete){
if(LED=="A"){
analogWrite(9,i);
}
else if(LED=="B"){
analogWrite(10,i);
}
else if(LED=="C"){
analogWrite(11,i);
}
stringcomplete=false;//将所有数据初始化,为下一次做准备
LED="";
instring="";
}
}
void serialEvent()
{
while(Serial.available()){
char inchar=Serial.read();
if(isDigit(inchar)){//判断是否为数字,是将数字赋给inspring,随后给i
instring+=inchar;
}
else if(inchar=='\n'){//出现换行符(结束符)证明数据接收完毕,可以执行loop循环
stringcomplete=true;
i=instring.toInt(); //将instring中的数字转化为INT型
}
else LED=inchar;//英文将赋值给LED
}
}
其中在串口事件中,字符为一个一个扫描并读取,例如串口输入A95,首先读取A存入inchar中,随后读取9存入instring再读取5存入instring中,最后读取==\N并将stringcomplete改为true==;最后把读取到的所有数字(也就是insting)转化为Int型并赋值给i。
串口事件.的一些用法在左边。
确实,引入串口事件后,整个程序会更有脉络感