极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 146975|回复: 87

Arduino入门教程--第三课--多个LED的闪烁

  [复制链接]
发表于 2012-5-24 17:30:25 | 显示全部楼层 |阅读模式
本帖最后由 弘毅 于 2012-12-8 22:15 编辑

实验器件:

ocrobot mango控制板(Arduino兼容)  一块  
面包板跳线  一盒  
面包板  一块  
LED发光二极管  六个  
220欧姆电阻  六个  
USB数据连接线  一根  










前天,我们已经玩了面包板上的led,大家应该尝试了各种闪法,当然你肯定不会满足于一盏灯的闪烁,今天我们就来演示怎么好多好多的led一起闪。

第一步当然是设计电路,我们先构思好自己的电路设计,下面就是我设计的电路(可能大家发现了,电路图上的led有个小弯角的是正极,对应真实LED比较长的那只脚)




电路设计就是这样了,为什么我空出了0和1两个接口呢?这两个接口其实共享了板子的串口,tx和rx,也就是说,如果在这两个接口上连接led的话,就无法进行正常的程序下载了。所以,一般我们会空出来不使用,一定要使用的情况下,也是先下载好程序然后再连接电路。

然后我们来面包板上按照电路图来搭建电路。

[


大家可以看到,实际的电路不一定像电路图设计上那么理想,所以我们会进行变通,我们的实际电路就是这样,将负极全部接到了板子的上部,然后将上部的负极和下部的负极联通,然后接到板子的GND(地线)接口,完成电路。

然后我们连接好板子的USB接口,编译下载下面的程序
  1. /*
  2. 作者:极客工坊
  3. 时间:2012年5月24日
  4. IDE版本号:1.0.1
  5. 发布地址:www.geek-workshop.com
  6. 作用:让六个led依次点亮熄灭
  7. */
  8. void setup()
  9. {
  10.   for (int i=2; i<=7; i++)    //通过循环的方式设置2-7号引脚为输出状态
  11.   {
  12.     pinMode(i,OUTPUT);
  13.   }
  14. }
  15. void loop()
  16. {
  17.   for (int x=2; x<=7; x++)   //通过循环的方式依次让每个引脚的led在1秒内完成明灭
  18.   {
  19.     digitalWrite(x,HIGH);
  20.     delay(500);
  21.     digitalWrite(x,LOW);
  22.     delay(500);
  23.   }
  24. }
复制代码
下载好后就可以看见led每半秒一个灯的速度依次闪动,这个就是传说中的流水灯,当然,闪烁的方法千变万化,LED的摆放方式也是千变万化,希望大家自己多思考多研究,将自己的变种多灯闪烁的视频和程序发帖与我们分享。

最后附一段我们拍摄的演示视频





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

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

本帖子中包含更多资源

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

x
回复

使用道具 举报

 楼主| 发表于 2012-8-19 15:02:02 | 显示全部楼层
远古天空 发表于 2012-8-18 19:07
请问强哥,如果想让所有灯一起亮一次用函数应该怎么写。谢谢!


一样的啊,只要将所有点亮led的语句一起写出来就行了

给个例程吧
  1. /*
  2. 作者:极客工坊
  3. 时间:2012年8月19日
  4. IDE版本号:1.0.1
  5. 发布地址:www.geek-workshop.com
  6. 作用:让六个led同时点亮熄灭
  7. */
  8. void setup()
  9. {
  10.   for (int i=2; i<=7; i++)    //通过循环的方式设置2-7号引脚为输出状态
  11.   {
  12.     pinMode(i,OUTPUT);
  13.   }
  14. }
  15. void loop()
  16. {
  17.   for (int x=2; x<=7; x++)   //通过循环的方式依次让每个引脚的led在点亮
  18.   {
  19.     digitalWrite(x,HIGH);
  20.   }
  21. delay(500);                   //同时点亮等待0.5秒

  22. for (int x2; x<=7; x++)              //循环方式让led熄灭
  23.         {
  24.          digitalWrite(x,LOW);
  25.   
  26.         }
  27. delay(500);                     //让他们熄灭0.5秒
  28.           }
复制代码
回复 支持 1 反对 2

使用道具 举报

 楼主| 发表于 2012-7-27 08:18:18 | 显示全部楼层
big_fat_meal 发表于 2012-7-26 18:25
点那个COPY怎么没用

据测试,IE9下偶见失效情况。。。。正在解决,请换用chrome 浏览器,或者chrome内核浏览器
回复 支持 0 反对 2

使用道具 举报

 楼主| 发表于 2012-11-5 18:03:21 | 显示全部楼层
happyfdg 发表于 2012-11-4 20:31
请问您用什么设计软件的理论电路图呢?

Fritzing
回复 支持 0 反对 2

使用道具 举报

发表于 2012-7-10 15:26:43 | 显示全部楼层
这个太简单了,跳过了
回复 支持 0 反对 1

使用道具 举报

发表于 2012-10-24 10:40:36 | 显示全部楼层
void style1 ()
{
  unsigned char i,j;
  digitalWrite(4,HIGH);
  delay(500);
  j=2;
  for(i=3;i>=1;i--)
  {
    digitalWrite(i,HIGH);
    digitalWrite(i+j,HIGH);
    delay(500);
    j+=2;
  }
  j=6;
  for(i=1;i<=3;i++)
  {
    digitalWrite(i,LOW);
    digitalWrite(i+j,LOW);
    delay(500);
    j-=2;
  }
  digitalWrite(4,LOW);
  delay(500);
  
}
void style2(void)
{
  unsigned char k,x;
  for(k=1;k<=7;k++)
  {
    for(x=1;x<=2;x++)
    {
      digitalWrite(k,HIGH);
      delay(200);
      digitalWrite(k,LOW);
      delay(200);
      digitalWrite(k,HIGH);
    }
  }
}
void setup()
{
  unsigned char a;
  for(a=1;a<=7;a++)
  {
     pinMode(a,OUTPUT);
  }
}
void loop()
{
  style1();
  style2();
}

大哥这个程序下载后,灯为什么没有循环?????
回复 支持 0 反对 1

使用道具 举报

发表于 2012-10-19 19:19:18 | 显示全部楼层
OK  成功了 谢谢{:soso_e142:}
void setup()
{
  for(int i=2;i<=7;i++)
  {
   pinMode(i,OUTPUT);
  }
  for(int x=2;x<=7;x++)
  {
   digitalWrite(x,HIGH);
  }
   delay(300);
   for(int x=2;x<=7;x++)
   {
   digitalWrite(x,LOW);
   }
   delay(1500);
   for(int x=2;x<=7;x++)
   {
    digitalWrite(x,HIGH);
    delay(300);
    digitalWrite(x,LOW);
    delay(300);
   }
   for(int x=2;x<=7;x++)
   {
    digitalWrite(x,HIGH);
   }
  
}
void loop()
{
};
回复 支持 0 反对 1

使用道具 举报

 楼主| 发表于 2012-10-19 08:09:23 | 显示全部楼层
宁静海 发表于 2012-10-18 22:45
强兄:

我想做一个 六个LED 先都亮 然后都灭  然后流水 最后停在 六个都亮的状态 实验

loop就是循环的意思。。如果只需要程序执行一次,所有代码写到setup里即可
回复 支持 0 反对 1

使用道具 举报

发表于 2012-10-18 22:45:12 | 显示全部楼层
本帖最后由 宁静海 于 2012-10-18 22:52 编辑

强兄:

我想做一个 六个LED 先都亮 然后都灭  然后流水 最后停在 六个都亮的状态 实验
下面是我写的码
void setup()
{
  for(int i=2;i<=7;i++)
  {
   pinMode(i,OUTPUT);
  }
}
void loop()
{
  for(int x=2;x<=7;x++)
  {
   digitalWrite(x,HIGH);
  }
   delay(300);
   for(int x=2;x<=7;x++)
   {
   digitalWrite(x,LOW);
   }
   delay(1500);
   for(int x=2;x<=7;x++)
   {
    digitalWrite(x,HIGH);
    delay(300);
    digitalWrite(x,LOW);
    delay(300);
    for(int x=2;x<=7;x++)
    digitalWrite(x,HIGH);
   }
  
}
编码没问题
就是在最后 这个程序总是在循环 不能固定在六个LED都亮的状态
应该怎么改啊
回复 支持 0 反对 1

使用道具 举报

发表于 2012-8-18 19:07:57 | 显示全部楼层
请问强哥,如果想让所有灯一起亮一次用函数应该怎么写。谢谢!
回复 支持 0 反对 1

使用道具 举报

发表于 2012-9-19 18:43:39 | 显示全部楼层
好东西,支持,顶~
回复 支持 0 反对 1

使用道具 举报

发表于 2012-7-26 14:57:48 | 显示全部楼层
小强哥:void setup()后面的FOR 循环我有点疑惑:
这里的for(int i=2;i<=7;i++),是一个循环,意思是把2-7号口作为输出端那么他是指2-7号口同时打开,还是指2号口打开以后+1,打开3号口(2号口关闭了吗?)之后+1,打开4号口(3号口关闭了吗?)以此类推。这种循环?
回复 支持 0 反对 1

使用道具 举报

 楼主| 发表于 2012-7-26 15:34:47 | 显示全部楼层
乐_乐(顺) 发表于 2012-7-26 14:57
小强哥:void setup()后面的FOR 循环我有点疑惑:
这里的for(int i=2;i

一个一个的打开,没有关闭,计算机执行程序都是如果你设置打开,就一直打开,除非你再写语句让其关闭让他关闭。。。。。
这个语句等效于
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
回复 支持 0 反对 1

使用道具 举报

发表于 2012-7-26 15:46:13 | 显示全部楼层
迷你强 发表于 2012-7-26 15:34
一个一个的打开,没有关闭,计算机执行程序都是如果你设置打开,就一直打开,除非你再写语句让其关闭让他 ...

明白了,谢谢
回复 支持 0 反对 1

使用道具 举报

发表于 2012-7-26 18:25:57 | 显示全部楼层
点那个COPY怎么没用
回复 支持 0 反对 1

使用道具 举报

发表于 2012-7-27 08:55:17 | 显示全部楼层
big_fat_meal 发表于 2012-7-26 18:25
点那个COPY怎么没用

千万不能用自主知识产权的360浏览器啥的。还有360这种软件不能装,IE9遇到不能copy。。。也是因为360修改了IE安全设置~~~~IE默认的配置是完全没问题的。
回复 支持 0 反对 1

使用道具 举报

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

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

Archiver|联系我们|极客工坊

GMT+8, 2022-10-8 05:45 , Processed in 0.094289 second(s), 32 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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