原帖由
A670521546
发自:dev.eefocus.com
------------------------------------------------------------------------------------------------------------------------------------------
从最基础的学起,来学习PWM调节led的亮度 脉冲宽度调制(PWM)是一种对模拟信号电平进行数字编码的方法,由于计算机不能输出模拟电压,只能输出0V或5V的数字电压值,我们就通过使用高分辨率计数器,利用方波的占空比被调制的方法来对一个具体的模拟信号的电平进行编码。PWM信号仍然是数字的,因为在给定的任意时刻,满幅值的直流供电要么是ON,要么是OFF。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。通的时候即是直流供电被加到负载上的时候,断的时候就即是供电被断开的时候。只要带宽足够,任何模拟值都可以使用PWM进行编码。输出的电压值是通过通和断的时间进行计算的。 用fritzing画的原理图,画的不怎么好看 int redpin=5;
int yellowpin=6;
int greenpin=7;
int redval;
int yellowval;
int greenval;
int i=0;
void setup()
{
pinMode(redpin,OUTPUT); //设置LED接口为输出接口
pinMode(yellowpin,OUTPUT);
pinMode(greenpin,OUTPUT);
pinMode(redval,INPUT); //设置LED变量为输入值,这部分可以略去,不需要定义INPUT,这个定义是说明下这几个变量属性
pinMode(yellowval,INPUT);
pinMode(greenval,INPUT);
Serial.begin(9600); //连接到串行端口,波特率为9600
}
void loop()
{
i++;
if(i<50)
{
redval+=1; //红灯变亮
yellowval=1; //黄灯不变
greenval+=1;//绿灯不便
}
else if(i<100)
{
redval-=1;
yellowval+=1;
greenval=1;
}
else if(i<200)
{
redval=1;
yellowval-=1;
greenval+=1;
}
else
{
i=0;
}
analogWrite(redpin,redval); //给LED接口赋模拟值
analogWrite(yellowpin,yellowval);
analogWrite(greenpin,greenval);
Serial.print(i,DEC);
Serial.print( " R:");
Serial.print(redval,DEC);
Serial.print( " Y:");
Serial.print(yellowval,DEC);
Serial.print( " G:");
Serial.println(greenval,DEC);
}
|