呼吸灯,就是让灯有一个由亮到暗,再到亮的逐渐变化的过程,感觉像是在均匀的呼吸。实则是通过PWM来控制LED亮度,使其呈现呼吸灯效果。
Arduino UNO数字引脚中有六个引脚标有“~”,这个符号就说明该口具有PWM功能。
一、呼吸灯
实物图:
参考代码:
int ledPin = 10;
void setup() {
pinMode(ledPin,OUTPUT);
}
void loop(){
for (int value = 0 ; value < =255; value++) //控制PWM亮度增加
{
analogWrite(ledPin, value);
delay(10);
}
for (int value = 255; value >=0; value--) //控制PWM亮度减小
{
analogWrite(ledPin, value);
delay(10);
}
}
二、串口控制LED明暗度
在串口监视器中发送信号a时,LED灯一点点亮,发送信号b时,LED灯更亮一点,发送c时,LED灯达到最亮,发送信号d时,LED灯熄灭。
参考代码:
int ledPin=10;
char key;
int value;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
pinMode(ledPin,OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
key=Serial.read();
if(key=='a'){
value=85;
analogWrite(ledPin,value);
Serial.print("key=");
Serial.println(key);
Serial.print("value=");
Serial.println(value);
}
if(key=='b'){
value=170;
analogWrite(ledPin,value);
Serial.print("key=");
Serial.println(key);
Serial.print("value=");
Serial.println(value);
}
if(key=='c'){
value=255;
analogWrite(ledPin,value);
Serial.print("key=");
Serial.println(key);
Serial.print("value=");
Serial.println(value);
}
if(key=='d'){
value=0;
analogWrite(ledPin,value);
Serial.print("key=");
Serial.println(key);
Serial.print("value=");
Serial.println(value);
}
}
三、火焰灯
通过PWM使LED产生随机的亮度变化,来模拟一个火焰闪烁的效果。random(0,120)+135,让其值稳定在135附近。
参考代码:
int ledPin1=5;
int ledPin2=10;
int ledPin3=11;
void setup() {
// put your setup code here, to run once:
pinMode(ledPin1,OUTPUT);
pinMode(ledPin2,OUTPUT);
pinMode(ledPin3,OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
analogWrite(ledPin1,random(0,120)+135);
analogWrite(ledPin2,random(0,120)+135);
analogWrite(ledPin3,random(0,120)+135);
}