创客联盟网

标题: Arduino小白自学教程008——让led有多级亮度+视频! [打印本页]

作者: CCFIVE    时间: 2013-7-23 23:03
标题: Arduino小白自学教程008——让led有多级亮度+视频!
大家有没有见过那种萤火虫灯的呢?
它另外的一个名字叫呼吸灯,所谓的呼吸灯就是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】
(, 下载次数: 134)
硬件按上图连接好,程序如下:
void setup(){   }void loop(){    analogWrite(6,255);}编译下载后,我们可以看到接在6脚的LED亮度很高。 (, 下载次数: 133) 我们再把程序改下把analogWrite(6,255)改成analogWrite(6,1) (, 下载次数: 133)
再编译下载,这时是不是可以看到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背光屏的亮度,我们就可能用到这条语句咯!https://player.youku.com/player.php/sid/XNTg0MTM3MDI0/v.swf


作者: segichen    时间: 2013-7-28 01:04
{:soso_e142:}
作者: wck963    时间: 2013-8-4 22:47
  1. void setup()
  2. {   
  3. }
  4. void loop()
  5. {
  6.     analogWrite(6,0);
  7.     analogWrite(6,1);
  8.     analogWrite(6,2);
  9.     analogWrite(6,3);





  10.     analogWrite(6,252);
  11.     analogWrite(6,253);
  12.     analogWrite(6,254);
  13.     analogWrite(6,255);
  14. }
复制代码

作者: 爷灬淡定    时间: 2013-8-11 15:57
void setup ()
{
  pinMode(3,OUTPUT);
  pinMode(5,OUTPUT);
}
void loop()
{
  for(int i=0;i<255;i++)
{
   analogWrite(3,i);
   delay(10);
}
for(int T=0;T<255;T++)
{
   analogWrite(5,T);
   delay(10);
}
}
作者: wubo1978001    时间: 2013-9-17 19:29
void setup()
{  
}
void loop()  
{
for(int i=0;i<255;i++)
{analogWrite(6,i);
delay(10);
}
for(int i=255;i>0;i--)
{analogWrite(6,i);
delay(10);
}
}




欢迎光临 创客联盟网 (https://immaker.org/) Powered by Discuz! X3.3