第二章 点亮LED灯(Arduino边做边学:从点亮Led到物联网)

本系列文章为作者原创,未经作者书面同意,不得转载!

几乎所有的编程学习都是从“hello,world”程序开始的,这几乎已经成为学习编程的一个传统,既然本系列文章的标题是《Arduino项目实战:从点亮Led到物联网》,那么我们还是从点亮Led来开始我们的Arduino项目实战之旅。

作为本系列的第一个项目,其实实现起来非常的简单,您几乎不用设计任何电路和做任何的连线,甚至都不需要编写任何代码,可以直接从Arduino IDE的示例代码中找到一个例程,然后完成程序的上传即可。

但本文对于初学者来说非常重要,它会告诉你怎么通过数据线连接Arduino电路板、Arduino程序的基本结构、怎么上传程序到Arduino电路板,还有几个重要的函数,也许是Arduino中最常用的函数。所以如果你是一个初学者,请跟着本文完成您的第一个项目。

1 项目介绍

点亮LED灯,并让LED灯闪动。
在这个项目中,我们先不用自己准备LED灯,我们先使用Arduino UNO电路板上面集成的LED灯,如下图红箭头所示的位置。


UNO-01.jpg

在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-02.jpg

当UNO电路板跟电脑连接上后,如果您使用的是WIN10操作系统,电脑会自动安装USB转串口驱动程序。Arduino电路板是通过串口跟电脑进行通信的,目前大部分的电脑都不再配备串口,老式的电脑会有,串口是长这个样子的:


COM04.jpg

现在的个人电脑一般不会配置串口(如果它不是上个世纪购买的话),所以我们使用USB口跟Arduino电路板进行通信,这时候我们就需要实现USB口跟串口的转换,Arduino电路板上都集成了USB转串口的芯片,我们只需要安装驱动即可。如果您的电脑安装驱动成功,在电脑的设备管理(鼠标点击电脑桌面“我的电脑”-点击鼠标右键-在弹出菜单中选择“管理”)中会看到USB串行设备,如下图所示:


COM 02.png

如果您的电脑没有自动安装驱动,您可能需要手动安装一下。详情请见附录《Arduino电路板USB转串口驱动安装方法》链接地址

4 程序代码

前面介绍过,我们的第一个项目并不需要您敲任何代码,在Arduino IDE的文件菜单---示例---01. Basics---Blink,打开Blink文件,如下图所示:


程序 01.png

下面是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项目完成了,虽然简单,但是意义非凡。您已经推开了一扇窗,一扇从虚拟的软件世界到真实的物理世界的窗户,窗户那一侧的世界无疑非常精彩,等待着您一起来探索!

如果您喜欢本文,您可以点击一下下面的喜欢按钮,您也可以关注我,谢谢您的支持!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,717评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,501评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,311评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,417评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,500评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,538评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,557评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,310评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,759评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,065评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,233评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,909评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,548评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,172评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,420评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,103评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,098评论 2 352

推荐阅读更多精彩内容