马上注册(开思网用户可以直接登录),结交更多创客好友,享用更多功能,让你轻松玩转创客社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
大家有没有见过那种萤火虫灯的呢?
它另外的一个名字叫呼吸灯,所谓的呼吸灯就是led由灭逐渐到最亮,再由最亮到灭的过程。
这节我们学的招数:
analogWrite(X,Y);
是不是觉得跟digitalWrite(6,HIGH);似曾相识呢?
analogWrite(X,Y);可以这样理解为就是控制电压输出,
X为控制的脚
Y为设定的电压值
X也是只能填数字,但是这个数字只能是(3,5,6,9,10,11),就是我们AI板子上带有“~”的引脚)。因为只有这几个脚才能输出变化的电压,Y是不是直接填5V呢?不是的!Y只能填写0-255其中一个数。其实就是一个映射!其实就是把5V分为256份,例如我输出5V,我就应该把Y写成255,如果我想输出0V,我就应该把Y写成0,又如我想输出2.5V,我就应该把Y写成127【(2.5/5)*256-1】
硬件按上图连接好,程序如下:
void setup(){ }void loop(){ analogWrite(6,255);}编译下载后,我们可以看到接在6脚的LED亮度很高。
我们再把程序改下把analogWrite(6,255)改成analogWrite(6,1)
再编译下载,这时是不是可以看到LED灯的亮度几乎灭掉了呢?说明你已经成功控制6脚的电压输出了!
如果我想做出LED由灭逐渐到最亮的效果,我们会这样写的:
void setup()
{
}
void loop()
{
analogWrite(6,0);
analogWrite(6,1);
analogWrite(6,2);
analogWrite(6,3);
analogWrite(6,252);
analogWrite(6,253);
analogWrite(6,254);
analogWrite(6,255);
}
额,如果你够耐心的你可以这样写完,但是你一定会累死的。程序编写是可以很智能的,有人早就想到有这样的情况,所以他们设置了for语句。那到底怎么用呢?
从上面的程序我们可以发现一个规律analogWrite(6,Y);Y只是从0一直递增到255。
这时我们可以用条语句告诉程序,程序啊!程序!你就是把Y不断换成从0到255的数就可以了,其他东西不要改变。
这是我们就可以翻译成
for(int i=0;i<255;i++)
{
analogWrite(6,i);
delay(10);
}
for的结构是这样的for(循环变量初始化;循环判断条件;循环变量增值)
for(int i=0;i<255;i++)的意思是int i=0产生一个变量i,并且初始化i=0,然后判断条件就是i是否小于255,i++的意思就是i自加1。
然后程序就执行analogWrite(6,i)一次。
知道i加到255时候,255不是小于255,不满足条件所以就跳出这个循环,即把这255次的任务完成了。
可能我说得还不够清楚,大家慢慢体会下,我再举个例子,例如我弄个a从10数到20。
for(int a=10;a<21,a++)。又如我想弄个b从30数到0。for(int b=30;b<0;b--)
如果大家还是不是很理解那就多尝试下,多想想,总会想通的,这个for循环是特别的好用,能让我们省写好多代码。
analogWrite的用法就讲到这里,这条语句实质就是用来控制引脚电压而已,例如如果控制LCD背光屏的亮度,我们就可能用到这条语句咯!
|