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-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秒
} big_fat_meal 发表于 2012-7-26 18:25 static/image/common/back.gif
点那个COPY怎么没用
据测试,IE9下偶见失效情况。。。。正在解决,请换用chrome 浏览器,或者chrome内核浏览器 happyfdg 发表于 2012-11-4 20:31 static/image/common/back.gif
请问您用什么设计软件的理论电路图呢?
Fritzing 这个太简单了,跳过了 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();
}
大哥这个程序下载后,灯为什么没有循环????? 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-18 22:45 static/image/common/back.gif
强兄:
我想做一个 六个LED 先都亮 然后都灭然后流水 最后停在 六个都亮的状态 实验
loop就是循环的意思。。如果只需要程序执行一次,所有代码写到setup里即可 本帖最后由 宁静海 于 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都亮的状态
应该怎么改啊 请问强哥,如果想让所有灯一起亮一次用函数应该怎么写。谢谢! 好东西,支持,顶~ 小强哥:void setup()后面的FOR 循环我有点疑惑:
这里的for(int i=2;i<=7;i++),是一个循环,意思是把2-7号口作为输出端那么他是指2-7号口同时打开,还是指2号口打开以后+1,打开3号口(2号口关闭了吗?)之后+1,打开4号口(3号口关闭了吗?)以此类推。这种循环? 乐_乐(顺) 发表于 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:34 static/image/common/back.gif
一个一个的打开,没有关闭,计算机执行程序都是如果你设置打开,就一直打开,除非你再写语句让其关闭让他 ...
明白了,谢谢 点那个COPY怎么没用 big_fat_meal 发表于 2012-7-26 18:25 static/image/common/back.gif
点那个COPY怎么没用
千万不能用自主知识产权的360浏览器啥的。还有360这种软件不能装,IE9遇到不能copy。。。也是因为360修改了IE安全设置~~~~IE默认的配置是完全没问题的。