迷你强 发表于 2012-5-24 17:30:25

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

本帖最后由 弘毅 于 2012-12-8 22:15 编辑

实验器件:


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










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

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



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

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


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

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

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

http://player.youku.com/player.php/sid/XNDAyMTUyNzU2/v.swf


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

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

迷你强 发表于 2012-8-19 15:02:02

远古天空 发表于 2012-8-18 19:07 static/image/common/back.gif
请问强哥,如果想让所有灯一起亮一次用函数应该怎么写。谢谢!

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

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

for (int x2; x<=7; x++)            //循环方式让led熄灭
        {
       digitalWrite(x,LOW);

        }
delay(500);                     //让他们熄灭0.5秒
          }

迷你强 发表于 2012-7-27 08:18:18

big_fat_meal 发表于 2012-7-26 18:25 static/image/common/back.gif
点那个COPY怎么没用

据测试,IE9下偶见失效情况。。。。正在解决,请换用chrome 浏览器,或者chrome内核浏览器

迷你强 发表于 2012-11-5 18:03:21

happyfdg 发表于 2012-11-4 20:31 static/image/common/back.gif
请问您用什么设计软件的理论电路图呢?

Fritzing

夏异 发表于 2012-7-10 15:26:43

这个太简单了,跳过了

南方之南 发表于 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();
}

大哥这个程序下载后,灯为什么没有循环?????

宁静海 发表于 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()
{
};

迷你强 发表于 2012-10-19 08:09:23

宁静海 发表于 2012-10-18 22:45 static/image/common/back.gif
强兄:

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


loop就是循环的意思。。如果只需要程序执行一次,所有代码写到setup里即可

宁静海 发表于 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都亮的状态
应该怎么改啊

远古天空 发表于 2012-8-18 19:07:57

请问强哥,如果想让所有灯一起亮一次用函数应该怎么写。谢谢!

939670129 发表于 2012-9-19 18:43:39

好东西,支持,顶~

乐_乐(顺) 发表于 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号口关闭了吗?)以此类推。这种循环?

迷你强 发表于 2012-7-26 15:34:47

乐_乐(顺) 发表于 2012-7-26 14:57 static/image/common/back.gif
小强哥: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);

乐_乐(顺) 发表于 2012-7-26 15:46:13

迷你强 发表于 2012-7-26 15:34 static/image/common/back.gif
一个一个的打开,没有关闭,计算机执行程序都是如果你设置打开,就一直打开,除非你再写语句让其关闭让他 ...

明白了,谢谢

big_fat_meal 发表于 2012-7-26 18:25:57

点那个COPY怎么没用

弘毅 发表于 2012-7-27 08:55:17

big_fat_meal 发表于 2012-7-26 18:25 static/image/common/back.gif
点那个COPY怎么没用

千万不能用自主知识产权的360浏览器啥的。还有360这种软件不能装,IE9遇到不能copy。。。也是因为360修改了IE安全设置~~~~IE默认的配置是完全没问题的。
页: [1] 2 3 4 5 6
查看完整版本: Arduino入门教程--第三课--多个LED的闪烁