小编理解的流水灯就是一组LED灯,可以在系统控制下按照设定的样式来点亮和熄灭,从而形成一定的视觉效果。
电路中是将7个LED灯的负极(较短引脚)接GND,将LED的正极(较长引脚)通过电阻连接到Arduino的2~8引脚,注意尽量不要使用Arduino的0和1引脚(这两个引脚主要用于串口通信,上传程序时也要用这两个引脚)。
这里小编要考考小伙伴们啦,LED灯的正极为什么必须要接电阻?这种接法是灌电流方式还是拉电流方式?想不起来的童鞋快去看看小编的上一篇文章吧。
样式一
7个LED灯同时闪烁,虽然我们看上去是同时,但是程序中还是一个一个点亮的,只是程序执行特别快,我们人的眼睛看不出间隔。
void setup() {
//设置2~8号引脚为输出模式
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
}
void loop() {
for (int i = 2; i <= 8; i++) {//for循环,用变量i代表Arduino的2~8号引脚
digitalWrite(i, HIGH);//设置引脚i输出高电平,从而点亮LED
}
delay(300);//延时300毫秒,可以根据闪烁效果自行更改
for (int i = 2; i <= 8; i++) {//循环
digitalWrite(i, LOW);//设置引脚i输出低电平,从而熄灭LED
}
delay(300);//延时300毫秒
}
样式二
7个LED灯,从两端向中间依次点亮,再由中间向两端依次点亮
void setup() {
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
}
int k;
void loop() {
k = 2;//定义变量,值为2代表2号引脚
int q =8;//定义变量,值为8代表8号引脚
while (k <= 8)//当k的值小于8时执行while循环
{
digitalWrite(k, HIGH);//k号引脚输出高电平,点亮连接到对应引脚的LED灯
digitalWrite(q, HIGH);//q号引脚输出高电平,点亮连接到对应引脚的LED灯
delay(300);//适当延时,有延时点亮的效果即可
digitalWrite(k, LOW);//k号引脚输出低电平,熄灭连接到对应引脚的LED灯
digitalWrite(q, LOW);//k号引脚输出低电平,熄灭连接到对应引脚的LED灯
k++;//k从2依次增加到8
q--;//q从8依次减小到2
}
}
样式三
1.一个一个点亮
7个LED灯,一个一个的点亮
void setup() {
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
}
int k;//定义变量,代表引脚号
void loop() {
k = 2;//引脚从2开始
while (k <= 8)
{
digitalWrite(k, HIGH);
delay(300);
digitalWrite(k, LOW);
k++;
}
}
2.两个两个点亮
7个LED灯,两个两个的点亮,逻辑跟一个一个点亮是一样的。
void setup() {
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
}
int k;//定义变量,代表引脚号
void loop() {
k = 2;//引脚从2开始
while (k <= 8)
{
digitalWrite(k, HIGH);//点亮第k个LED灯
digitalWrite(k - 1, HIGH);//同时点亮第k-1个LED灯,也就是k引脚前面的一个
delay(300);//延时
digitalWrite(k - 1, LOW);//熄灭第k-1个LED灯
k++;//k从2开始依次增加,一直加到8
}
delay(300);//延时
digitalWrite(k - 1, LOW);//最后再熄灭最后点亮的一个LED灯
delay(300);//延时
}
3.难度升级
7个LED灯,先一个一个点亮,再两个两个点亮,再三个三个点亮,再…一直到7个全部点亮,再重复这个过程。
感觉好难!!!其实做完一个一个点亮和两个两个点亮的程序,我们只要找出程序中的规律就可以了,只不过会嵌套循环语句,多定义几个变量。
void setup() {
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
}
int k, deg, i;//定义变量
void loop() {
deg = 1;//标记每次点亮几个LED灯
while (deg <= 7)//一共7个LED灯
{
k = 2;//代表2号引脚
while (k <= 8)
{
i = 0;//表示k前面要点亮/熄灭的LED灯有几个
while (i < deg)
{
digitalWrite(k - i, HIGH);//点亮k-i号LED灯,也就是k前面的第i个
i++;
}
delay(300);
digitalWrite(k - deg + 1, LOW);//熄灭k-(deg-1)号LED灯
k++;
}
i = deg - 1;//最后有几个LED灯要单独熄灭
while (i > 0)
{
delay(300);
digitalWrite(k - i, LOW);//熄灭第k-i号LED灯
i--;
}
delay(300);
deg++;//deg加1,准备下次循环点亮几个LED灯
}
}
综合显示效果
把上面的几种花样写到一个程序里,先让7个LED灯闪烁,然后再从两端向中间点亮,再依次点亮,最后再配上点音乐,感觉更嗨了。
void setup() {
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
}
int k, deg, i;//定义变量
void loop() {
for (int j = 0; j < 3; j++)//先闪烁3次
{
for (int i = 2; i <= 8; i++) {//for循环,用变量i代表Arduino的2~8号引脚
digitalWrite(i, HIGH);//设置引脚i输出高电平,从而点亮LED
}
delay(300);//延时300毫秒,可以根据闪烁效果自行更改
for (int i = 2; i <= 8; i++) {//循环
digitalWrite(i, LOW);//设置引脚i输出低电平,从而熄灭LED
}
delay(300);//延时300毫秒
}
k = 2;//定义变量,值为2代表2号引脚
int q = 8; //定义变量,值为8代表8号引脚
while (k <= 8)//当k的值小于8时执行while循环
{
digitalWrite(k, HIGH);//k号引脚输出高电平,点亮连接到对应引脚的LED灯
digitalWrite(q, HIGH);//q号引脚输出高电平,点亮连接到对应引脚的LED灯
delay(300);//适当延时,有延时点亮的效果即可
digitalWrite(k, LOW);//k号引脚输出低电平,熄灭连接到对应引脚的LED灯
digitalWrite(q, LOW);//k号引脚输出低电平,熄灭连接到对应引脚的LED灯
k++;//k从2依次增加到8
q--;//q从8依次减小到2
}
deg = 1;//标记每次点亮几个LED灯
while (deg <= 7)//一共7个LED灯
{
k = 2;//代表2号引脚
while (k <= 8)
{
i = 0;//表示k前面要点亮/熄灭的LED灯有几个
while (i < deg)
{
digitalWrite(k - i, HIGH);//点亮k-i号LED灯,也就是k前面的第i个
i++;
}
delay(300);
digitalWrite(k - deg + 1, LOW);//熄灭k-(deg-1)号LED灯
k++;
}
i = deg - 1;//最后有几个LED灯要单独熄灭
while (i > 0)
{
delay(300);
digitalWrite(k - i, LOW);//熄灭第k-i号LED灯
i--;
}
delay(300);
deg++;//deg加1,准备下次循环点亮几个LED灯
}
}
关于Arduino控制流水灯的案例就分享这些了,大家还有更好玩的流水灯案例吗?有的话请留言告诉小编。更多精彩案例内容,请关注小编的微信公众号《不莣初芯》。