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

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

2023年7月14日发(作者:)

基础教程2Arduino让多个LED炫酷地闪我是潘,曾经是个⼯程师。这是为 写的专栏。上⼀课,你已经了解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(){// 初始化端⼝的模式为 OUTPUTfor (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(){// 初始化端⼝的模式为 OUTPUTfor (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 ,往往只需简单⼏段代码,就可以创造出千变万化的效果。

发布者:admin,转转请注明出处:http://www.yc00.com/news/1689331878a231164.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信