创客联盟网
标题:
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】
(, 下载次数: 232)
上传
点击文件名下载附件
下载积分: 贡献 -1
硬件按上图连接好,程序如下:
void setup(){ }void loop(){ analogWrite(6,255);}
编译下载后,我们可以看到接在6脚的LED亮度很高。
(, 下载次数: 234)
上传
点击文件名下载附件
下载积分: 贡献 -1
我们再把程序改下把
analogWrite
(
6
,
255
)
改成
analogWrite
(
6
,
1
)
(, 下载次数: 236)
上传
点击文件名下载附件
下载积分: 贡献 -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背光屏的亮度,我们就可能用到这条语句咯!
https://player.youku.com/player.php/sid/XNTg0MTM3MDI0/v.swf
作者:
segichen
时间:
2013-7-28 01:04
{:soso_e142:}
作者:
wck963
时间:
2013-8-4 22:47
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);
}
复制代码
作者:
爷灬淡定
时间:
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