本系列文章为作者原创,未经作者书面同意,不得转载!
几乎所有的编程学习都是从“hello,world”程序开始的,这几乎已经成为学习编程的一个传统,既然本系列文章的标题是《Arduino项目实战:从点亮Led到物联网》,那么我们还是从点亮Led来开始我们的Arduino项目实战之旅。
作为本系列的第一个项目,其实实现起来非常的简单,您几乎不用设计任何电路和做任何的连线,甚至都不需要编写任何代码,可以直接从Arduino IDE的示例代码中找到一个例程,然后完成程序的上传即可。
但本文对于初学者来说非常重要,它会告诉你怎么通过数据线连接Arduino电路板、Arduino程序的基本结构、怎么上传程序到Arduino电路板,还有几个重要的函数,也许是Arduino中最常用的函数。所以如果你是一个初学者,请跟着本文完成您的第一个项目。
1 项目介绍
点亮LED灯,并让LED灯闪动。
在这个项目中,我们先不用自己准备LED灯,我们先使用Arduino UNO电路板上面集成的LED灯,如下图红箭头所示的位置。
在Arduino系列的电路板上,有不少型号都集成了一个可控制的LED灯,但是它们的引脚PIN并不完全相同,Ardunio Uno, MEGA, ZERO是PIN13,而Ardunio MKR1000是PIN6。本文使用的是UNO电路板,如果您手上的电路板不是UNO,还请确认一下它是否集成有可控LED,然后它的引脚是哪一个。
2 所需元器件
元器件 | 型号 | 数量 | 备注 |
---|---|---|---|
主控板 | arduino Uno | 1 | |
数据线 | Uno数据线 | 1 |
3 设备连接
您只需要将Arduino UNO电路板通过数据线跟电脑的USB口连接即可,如下图所示,数据线一端插入UNO电路板的数据接口,另一端插入电脑USB接口。
当UNO电路板跟电脑连接上后,如果您使用的是WIN10操作系统,电脑会自动安装USB转串口驱动程序。Arduino电路板是通过串口跟电脑进行通信的,目前大部分的电脑都不再配备串口,老式的电脑会有,串口是长这个样子的:
现在的个人电脑一般不会配置串口(如果它不是上个世纪购买的话),所以我们使用USB口跟Arduino电路板进行通信,这时候我们就需要实现USB口跟串口的转换,Arduino电路板上都集成了USB转串口的芯片,我们只需要安装驱动即可。如果您的电脑安装驱动成功,在电脑的设备管理(鼠标点击电脑桌面“我的电脑”-点击鼠标右键-在弹出菜单中选择“管理”)中会看到USB串行设备,如下图所示:
如果您的电脑没有自动安装驱动,您可能需要手动安装一下。详情请见附录《Arduino电路板USB转串口驱动安装方法》链接地址
4 程序代码
前面介绍过,我们的第一个项目并不需要您敲任何代码,在Arduino IDE的文件菜单---示例---01. Basics---Blink,打开Blink文件,如下图所示:
下面是Blink程序的代码:
/*
Blink
Turns an LED on for one second, then off for one second, repeatedly.
Most Arduinos have an on-board LED you can control. On the UNO, MEGA and ZERO
it is attached to digital pin 13, on MKR1000 on pin 6. LED_BUILTIN is set to
the correct LED pin independent of which board is used.
If you want to know what pin the on-board LED is connected to on your Arduino
model, check the Technical Specs of your board at:
https://www.arduino.cc/en/Main/Products
modified 8 May 2014
by Scott Fitzgerald
modified 2 Sep 2016
by Arturo Guadalupi
modified 8 Sep 2016
by Colby Newman
This example code is in the public domain.
http://www.arduino.cc/en/Tutorial/Blink
*/
// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin LED_BUILTIN as an output.
pinMode(LED_BUILTIN, OUTPUT);
}
// the loop function runs over and over again forever
void loop() {
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
在上面的程序中,我们发现其实大部分内容都被“ /* ”和“ */ ”包裹,这部分内容是程序中的注释,注释并不是程序的一部分,在程序编译时,这部分内容会被编译器忽略,注释的目的是解释某一小段或者某一行代码的功能,便于今后自己或者别人读到这段代码时能够很快的理解。
在Arduino程序中,有两种形式的注释:
- 单行注释:以 // 开始,直到行末为止;
- 多行注释:以 /* 开始,以 */ 终止。
所以我们去掉上面代码中注释的部分,程序如下:
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
}
是不是看起来清爽了许多,不过如果你不熟悉Arduino编程的话,这段代码看起来就不知所云了,带注释的代码看起来冗余,但我们大体能够读明白程序的功能。好吧,下面我们对上面的程序做一个解释。
4.1 程序结构
Arduino程序结构主要包含两部分:setup()函数和loop()函数。
setup()函数
Arduino程序启动时会调用 setup()函数。在程序中一般使用它来初始化变量,引脚模式,启用库等。setup函数只能在Arduino电路板每次上电或复位后运行一次。
loop()函数
loop() 函数,正如它的函数名称所指,这个函数会在Arduino上电或者复位并调用完setup()函数后连续循环的调用执行。loop()函数是Arduino程序的主体,允许你的程序连续循环的获得外部输入、进行程序处理和向外输出。这句话您目前理解起来也许有点费劲,没关系,我们可以暂时放一放,随着学习的深入,您慢慢就会理解,现在您需要了解的是:loop()函数中的语句,会被Arduino电路板一遍又一遍的从头到尾的反复执行,直到Arduino电路板复位或者掉电关闭。
4.2 代码讲解
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
setup()函数中就一条语句:
pinMode(LED_BUILTIN, OUTPUT);
这条语句的作用是告诉Arduino主控板将LED_BUILTIN(这是一个宏,在Arduino的核心库文件“pins_arduino.h”中已经定义,它代表13)引脚,即13引脚,设置为输出模式。
请注意Arduino的语法规则,每条语句都必须以分号结束,必须是英文字符的分号";",请一定跟中文字符的分号“;”区分开,请在英文输入法下进行输入,否则程序编译时会出错。
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
}
loop()函数中有四条语句:
digitalWrite(LED_BUILTIN, HIGH);
这条语句的作用是向第13引脚写入HIGH值,由于该引脚已在setup()函数中通过pinMode()配置为OUTPUT,其电压将被设置为相应的值:HIGH为5V,LOW为0V(接地),这条语句执行后,13引脚的电压将设置为5V。
由于UNO板载LED灯的正极接着13引脚,负极接着GND(0V),根据电路原理,当13引脚的电压为5V时,LED灯将被点亮。
delay(1000);
这条语句的作用是告诉Arduino电路板,在执行下一条语句之前先等待1000毫秒(1秒等于1000毫秒)。
digitalWrite(LED_BUILTIN, LOW);
这条语句的作用是向第13引脚写入LOW值,其电压将被设置为0V,根据前面的说明,如果13引脚电压为0V,板载LED灯将熄灭。
delay(1000);
这条语句的作用是告诉Arduino电路板,在执行下一条语句之前再等待1000毫秒。
由于这是loop()函数,所以Arduino在执行完第四条语句后,又开始重复执行loop()函数的第一条语句,如此反复。
这个时候,我们再来一条一条的回顾这段代码:
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
}
您是不是觉得它已经变得非常简单,它所实现的功能也非常清晰了,那就是:让板载LED灯按照亮一秒、熄一秒的频率闪烁。
5 执行效果
当您完成上面的一切,您是不是有点迫不及待的想上传程序到Arduino电路板上看看程序的执行效果了?好吧,开始上传吧,按照本文之前介绍的,先确认电路板跟电脑的连接,如果没问题,选择好COM通信端口,点击“上传”按钮。
当程序上传成功后,Arduino电路板会自动重启,如果一切正常,您会看到UNO的板载LED开始按照1秒1次的频率闪烁了。
恭喜您,您的第一个Arduino项目完成了,虽然简单,但是意义非凡。您已经推开了一扇窗,一扇从虚拟的软件世界到真实的物理世界的窗户,窗户那一侧的世界无疑非常精彩,等待着您一起来探索!
如果您喜欢本文,您可以点击一下下面的喜欢按钮,您也可以关注我,谢谢您的支持!