打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
基础教程2 Arduino 让多个LED 炫酷地闪

我是潘,曾经是个工程师。这是为Ardui.Co 写的专栏。上一课,你已经了解Arduino 的基本工作原理,并且学会了控制一个灯,但觉得不够酷?Arduino Uno 有13个 DIGITAL I/O 端口,可以同时控制13个 LED。而且 Arduino 还可以通过 I2C、SPI 等协议扩展,控制几百个 LED 都不成问题,但扩展我们后面再讲,现在先演示一下怎样控制多个 LED 。

电路是这样设计的:从第 8 个 DIGITAL I/O 开始到第 13 个,每个端口串联一个220欧姆的电阻和 LED。其中,LED 正极(长的一端)接电阻,电阻再接I/O,LED 负极接地(Arduino 上的 GND 端口)

我们选用红黄绿 3 种 LED,但每种颜色的 LED 压降都不一样,红色约 2.1V,黄色2.4V、绿色2.7V,而 Arduino DIGITAL I/O 输出高电平为 5V ,这意味着串联的电阻压降不一样,三种 LED 通过电流大小不等,因此别奇怪它们的亮度不同。

现在要让 LED 按顺序轮流点亮,就是传说中的跑马灯效果,程序如下:

int del = 100; // 设置延时,100毫秒

void setup()

{

pinMode(8, OUTPUT);

pinMode(9, OUTPUT);

pinMode(10, OUTPUT);

pinMode(11, OUTPUT);

pinMode(12, OUTPUT);

pinMode(13, OUTPUT);

}

void loop()

{

digitalWrite(8, HIGH);

delay(del);

digitalWrite(8, LOW);

digitalWrite(9, HIGH);

delay(del);

digitalWrite(9, LOW);

digitalWrite(10, HIGH);

delay(del);

digitalWrite(10, LOW);

digitalWrite(11, HIGH);

delay(del);

digitalWrite(11, LOW);

digitalWrite(12, HIGH);

delay(del);

digitalWrite(12, LOW);

digitalWrite(13, HIGH);

delay(del);

digitalWrite(13, LOW);

}

看看效果:

这程序很容易理解,端口 8~13 设置为输出模式,然后点亮一个就灭掉一个,而且也能很好工作。只是重复代码太多,6 个 LED 好处理,但如果有几百个 LED 呢?

Arduino Uno 只有 32KB 程序空间,因此必须精简以节约空间,这样才能在以后容纳更复杂的系统。我们将上述程序改成 for 循环:

int del = 100; // 延时默认为100毫秒

void setup()

{

// 初始化端口的模式为 OUTPUT

for (int i = 8; i <= 13="" ;="">

{

pinMode(i, OUTPUT);

}

}

void loop()

{

for (int i = 8; i <= 13;="">

{

digitalWrite(i, HIGH);

delay(del);

digitalWrite(i, LOW);

}

for (int i = 13; i >= 8; i--)

{

digitalWrite(i, HIGH);

delay(del);

digitalWrite(i, LOW);

}

}

IDE显示,没有优化前,程序占用1,270 字节,优化后为 1,122 字节,总空间的3%。现在对于动辄几 TB 存储空间的个人电脑来讲,1KB 根本不足道,但对 Arduino ,每一个字节都要精打细算。

现在我们让它有更多的变化,加入一个随机函数 random(),让跑马灯循环 3 遍后,随机点亮 3 个。

random(x) 函数,能够在 0 ~ x(不包含最大值 x)的范围内随机生成一个整数,比如 random(256),随机生成 0 ~ 255 中的一个整数,再如 random(10, 20),随机生成 10 ~ 19 中的一个整数。

void loop(),本身已经是个循环,我们要在里面嵌套一个小循环:

int del = 100; // 延时默认为100毫秒

void setup()

{

// 初始化端口的模式为 OUTPUT

for (int i = 8; i <= 13="" ;="">

{

pinMode(i, OUTPUT);

}

}

void loop()

{

for (int j = 1; j <= 3;="" j++="">

{

for (int i = 8; i <= 13;="">

{

digitalWrite(i, HIGH);

delay(del);

digitalWrite(i, LOW);

}

for (int i = 13; i >= 8; i--)

{

digitalWrite(i, HIGH);

delay(del);

digitalWrite(i, LOW);

}

}

for (int k = 1; k <= 3;="" k++="">

{

int p = random(8, 14);

digitalWrite(p, HIGH);

delay(del);

digitalWrite(p, LOW);

}

}

p 是一个变量,用 random() 给它赋值前,要声明它的类型为整数 int:

int p;

p = random(8, 14);

但为了节省空间,我们把它写成上面的形式。

灯光不仅是我们塑造环境氛围的一种基本需求,而且是一种艺术表现形式。后面你会发现通过 Arduino ,往往只需简单几段代码,就可以创造出千变万化的效果。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Arduino在中断函数里面怎么延时
【Arduino学习笔记】蓝牙控制手自两用避障车
利用74HC595控制8X8LEDs矩阵的探讨
Arduino教程学习A17
Arduino小车
Simplest and Cheapest Arduino
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服