极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 159183|回复: 41

Arduino入门教程--第七课--程序PWM控制LED亮度[呼吸灯]

[复制链接]
发表于 2012-6-7 19:27:21 | 显示全部楼层 |阅读模式
本帖最后由 迷你强 于 2016-9-10 14:18 编辑

前两课我们用按钮,用电位器通过PWM方式调节LED的亮度,今天我们玩个简单的,纯粹用编程的手法来让LED渐明渐暗,如同呼吸一般,所以我们给它起了一个神奇的名字,呼吸灯。

其实本课的电路是这几课中最简单的。俗称最开始的质量最好,最后的偷工减料最严重。。。。。开个玩笑。

试验用元器件列表:


ocrobot mango控制板(Arduino兼容)  一块  
面包板  一块  
面包板专用跳线  一盒  
任意颜色LED  一个  
220欧姆电阻  一个  
USB数据线  一根  










准备好以上元器件,我们就着手设计电路图,如下图



同样的,因为是PWM试验,所以LED的数字接口一定要选用带#号标识的数字口,只有带#号的数字输出口才具有硬件PWM输出功能。

然后我们就依据电路连接图来搭建自己的试验电路,我搭建的电路如下:




好了,下面大家来看程序,这可是今天的主角:
希望大家自己动手调整几个延时参数,让呼吸灯的效果更真实,具有美感
  1. /*
  2. 作者:极客工坊
  3. 时间:2012年6月8日
  4. IDE版本号:1.0.1
  5. 发布地址:www.geek-workshop.com
  6. 作用:通过循环语句控制PWM来达到呼吸灯效果
  7. */

  8. void setup ()
  9. {
  10.   pinMode(11,OUTPUT);
  11. }

  12. void loop()
  13. {
  14.   for (int a=0; a<=255;a++)                //循环语句,控制PWM亮度的增加
  15.   {
  16.     analogWrite(11,a);
  17.     delay(8);                             //当前亮度级别维持的时间,单位毫秒            
  18.   }
  19.     for (int a=255; a>=0;a--)             //循环语句,控制PWM亮度减小
  20.   {
  21.     analogWrite(11,a);
  22.     delay(8);                             //当前亮度的维持的时间,单位毫秒  
  23.   }
  24.   delay(800);                             //完成一个循环后等待的时间,单位毫秒
  25. }
复制代码

然后,我们将程序下载到ocrobot mango(Arduino兼容)控制板中,就能看到效果了,下面的视频是我的试验演示效果。




==========分割线 下面为扩展阅读==========

本次实验所用到的语法请点击关键字进入极客工坊WIKI查看,词条内容在WIKI中不定期更新。
void
setup()
loop()
pinMode()
analogWrite()
int
<=
++
delay()


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2012-9-19 19:11:15 | 显示全部楼层
谢谢楼主分享,好东西
回复 支持 1 反对 0

使用道具 举报

发表于 2012-7-11 11:41:24 | 显示全部楼层
学习了,不错
回复 支持 反对

使用道具 举报

发表于 2012-8-19 12:11:35 | 显示全部楼层
请问强哥,我把这个实验和模拟变阻器实验结合起来,但是程序写在同一个loop里,等呼吸灯循环一次模拟控制灯才采样一次。如何才能让两个循环函数同时或交替运行?
谢谢!
回复 支持 反对

使用道具 举报

发表于 2012-11-24 13:40:26 | 显示全部楼层
为什么13引角不行呢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-11-24 15:05:34 | 显示全部楼层
lllangxx 发表于 2012-11-24 13:40
为什么13引角不行呢

板子上带“#”号标识的才是PWM引脚
回复 支持 反对

使用道具 举报

发表于 2012-11-24 15:10:59 | 显示全部楼层
迷你强 发表于 2012-11-24 15:05
板子上带“#”号标识的才是PWM引脚

谢谢明白了
回复 支持 反对

使用道具 举报

发表于 2012-12-19 09:12:35 | 显示全部楼层
学习学习~~
回复 支持 反对

使用道具 举报

发表于 2013-1-8 18:47:00 | 显示全部楼层
你好,请问怎么修改PWM的周期呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-1-8 20:33:25 | 显示全部楼层
Youth 发表于 2013-1-8 18:47
你好,请问怎么修改PWM的周期呢?

查阅该语句的语法手册。。。
回复 支持 反对

使用道具 举报

发表于 2013-2-8 16:27:18 | 显示全部楼层
void loop()

  for(int a=0;a<=255;a++)
   {
           analogWrite(11,a);
           delay(8);
     }

   if(a==255)
     {
        a=-a
      }
回复 支持 反对

使用道具 举报

发表于 2013-4-27 23:19:40 | 显示全部楼层
我的实现内容:

int n = 0; // n 从 1 至 255,控制led亮度
int i = 5;  // 递进数

void setup()
{
  pinMode( 11, OUTPUT); //设置11口为PWM输出端
}

void loop()
{
  n += i;                               // n每次增加 i

  if ( n == 255 || n == 0)      //在n升至255或者降至0时,i进行反转。这样led灯能在亮暗间转换
   i = -i;

  analogWrite( 11, n );
  delay( 50 );                       //延迟50ms,进行下一次亮度调整
}
回复 支持 反对

使用道具 举报

发表于 2013-5-25 12:22:33 | 显示全部楼层
呼吸灯
int n=0;
int b=1;
void setup ()
{

  pinMode(6,OUTPUT);      //该端口需要选择有#号标识的数字口
  
}

void loop()
{

if(n>=100){
   b=-1;
}
if(n==0){
   b=1;
}
n=n+(5*b);

analogWrite(6,n);
  delay (100);
}
回复 支持 反对

使用道具 举报

发表于 2013-6-26 12:04:39 | 显示全部楼层
我欣赏12楼的,很有创意!收藏了!
回复 支持 反对

使用道具 举报

发表于 2013-8-9 17:19:38 | 显示全部楼层
12楼的思路精炼!重新贴一下测试通过的程序:
  1. /* 程序功能:控制PWM来达到呼吸灯效果 */

  2. int n=10;     // n从10到250,不想全灭掉
  3. int i=5;      // 亮度增/减量

  4. void setup() {pinMode(11,OUTPUT);}

  5. void loop() {
  6.   n+=i;
  7.   if(n==255||n==5) i=-i;  // 极值时,增/减量进行反转
  8.   analogWrite(11,n);
  9.   delay(50);
  10. }
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-20 02:14 , Processed in 0.066378 second(s), 33 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表