菜单 English Ukrainian 俄语 主页

面向爱好者和专业人士的免费技术图书馆 免费技术库


无线电电子与电气工程百科全书
免费图书馆 / 无线电电子和电气设备方案

阿杜伊诺。 数字 I/O 操作。 无线电电子电气工程百科全书

免费技术库

无线电电子与电气工程百科全书 / 业余无线电设计师

文章评论 文章评论

加载完Arduino IDE开发环境后,可以看到在打开的窗口中显示的future程序的空白处有两个函数:setup()和loop()。 setup() 函数启动任何程序。 它在电路板通电后立即执行一次,并且每次按下电路板上的 RESET 按钮后都会执行一次,这会将微控制器设置为其原始状态。 在此函数内,设置端口的操作模式,初始化微控制器内部和与其连接的外部设备的串行接口和其他外围设备。 该函数即使是空的,也必须存在于程序中。

Loop() 函数包含一个无限循环,微控制器会重复执行该循环,直到电源关闭。 它询问外部传感器、向执行器发送命令、执行计算和其他操作。 我们以一个简单的程序为例,该程序在一秒内点亮然后熄灭 Arduino 板上内置的 LED,该 LED 上标有字母 L,并连接到数字引脚 D13。

该程序是 Arduino IDE 提供的标准示例之一。 在表中。 图 1 以所附形式显示其文本。 请注意,在 Arduino 行话中,程序的源代码被称为“草图”——草图。

表1

阿杜诺。 数字 I/O 操作

与一个块相关的程序片段由大括号 { 和 } 分隔。 在下文中,我们将它们称为运算符括号。 程序的文本可能包含解释其本质和工作细微差别的注释。 多行注释仅限于字符 /*(在开头)和 */(在结尾)的组合。 字符 // 开始注释,并在同一行末尾结束。 在翻译过程中(将人可以理解的编程语言的程序文本转换为微控制器可执行的机器代码),这部分文本被完全忽略。

setup() 函数主体中唯一的可执行行

pinMode(13,输出);

将 Arduino 板的引脚 D13 设置为输出模式。

loop() 函数从该行开始

数字写入(13,高);

它将输出 D13 设置为高逻辑电平。 在 Arduino UNO 中,它等于相对于公共线的电源电压 (+5 V)。 这将打开 LED。

紧随其后的是行

延迟(1000);

它导致可执行程序在括号中指定的时间(以毫秒为单位)内不跳转到下一行。 暂停后,程序将 D13 输出设置为与公共线电位相对应的低逻辑电平,从而关闭 LED。 此操作由以下行描述

数字写入(13,低);

接下来,程序再次保持 1 秒的暂停,之后从头开始重复 Loop() 函数体中描述的整个操作序列。 这一直持续到微控制器关闭为止。

应该谨慎使用delay()函数。 如果在其中指定的时间间隔内发生任何重要事件(例如传感器被短时间触发),程序将不会响应该事件。

请记住,Arduino 引脚作为输出时给出的最大电流为 40 mA,而所有输出的总电流不应超过 300 mA。 这足以为普通 LED 供电,您还可以直接将手机上的低压干簧继电器或低功率振动电机连接到输出。 如果没有放大器,您将无法连接任何更强大的东西,而且这是危险的 - 您可能会毁坏微控制器。

如有必要,模拟输入 A0-A5 可以与 D0-D13 一起用作数字输入和输出,分别用编号 14 至 19 表示。

现在让我们稍微修改一下程序。 对于这样一个简单的算法,这些修改并不是根本性的,但在更复杂的情况下,这样的改变很重要。 首先,让我们将英文注释替换为俄文。 例如,打开 LED 的行将被注释为:“打开 LED”。 你不应该写:“我们在D13线上设置了一个高电平”,这从程序文本中已经很清楚了。

当然,每一行的详细注释通常是多余的,但不应该懒得写。 一段时间后,程序的细节就会被遗忘,即使是作者本人,也只需一条注释就能帮助你快速理解其本质。

接下来,我们将更改程序,使连接到 Arduino 的 D13 引脚而不是 D12 引脚的 LED 闪烁。 由于板上没有连接到 D12 的 LED,因此需要一个带有串联电阻的外部 LED。 按照如图所示的图进行连接。 1. 选择附加电阻,使电流切断 LED 的电流在 5 ... 10 mA 范围内。 这将为大多数 LED 提供相当明亮的光芒。 连接了外部 LED 的 Arduino UNO 板如图 2 所示。 XNUMX.

阿杜诺。 数字 I/O 操作
米。 一、LED连接图

阿杜诺。 数字 I/O 操作
米。 2. 外接 LED 的 Arduino UNO 板

建议制作多个带有附加电阻的 LED。 它们对于制作灯光效果的自动机来说并不是很有用,而是对于快速检查电路板输出的电压电平并根据正在调试的程序监视其变化而言非常有用。

要控制不连接到 D13 而是连接到 D12 的 LED,在这种情况下,只需更正程序文本中所有数字 13 乘 12 就足够了。除了注释之外,数字 13 在程序文本中只出现了 XNUMX 次,所以改变它并不困难。 然而,随着程序量的增加,情况发生了根本性的变化。 替换三个数字是一回事,而在一个长程序的不同位置替换几十个相同的数字则完全是另一回事。 此外,在某些地方这个数字可能意味着完全不同的东西,你不需要改变它。

为了使此类更改更容易进行,我们在程序开头声明一个变量,并为其分配一个与所需输出的数量相对应的值:

诠释 LEDPIN = 12;

另外,无论输出数字13出现在哪里,我们都会将其替换为该变量的名称。 如果现在需要再次更改 LED 的连接,只需更改 LEDPIN 变量描述中的一个数字就足够了。

修改后的程序如表所示。 2. 必须将其加载到Arduino板的微控制器存储器中。 为此,请从 IDE 的主菜单中选择“文件→加载”。 如果在编辑窗口中键入的程序尚未预先保存到文件中,IDE 会要求您指定保存该程序的文件名。 经过 Arduino IDE 将程序翻译成微控制器可以理解的机器代码所需的时间后,板上的“Rx”和“Tx”LED 将开始闪烁,表示通过微控制器的串行接口接收和传输消息。

表2

阿杜诺。 数字 I/O 操作

如果一切都正确完成,有关正确加载的报告将出现在程序窗口的底部。 它将显示有关加载的程序占用了多少可用的 32 KB 微控制器程序存储器以及需要多少 RAM 来容纳变量的信息。 连接到引脚 D12 的 LED 将开始闪烁,闪烁周期为 2 秒。

如果将一行五个 LED 连接到 D8-D12 Arduino 引脚(图 3)并加载表中所示的程序。 如图 3 所示,它将交替亮起这些 LED 中的每一个以及连接到安装在板上的 D500 的 LED。 如果问题得到“正面”解决,则该程序可能会变得更长,只需在具有不同数量输出的 setup() 函数行中重复必要的次数,将它们设置为输出,然后在Loop() 函数 - 一系列行,包括下一个暂停并将其关闭的 LED。 for 循环语句有助于缩短程序。

阿杜诺。 数字 I/O 操作
米。 3.一排五个LED

表3

阿杜诺。 数字 I/O 操作

for关键字后面的括号表示循环变量的初始值——LEDPIN=8,执行循环体的条件——LEDPIN<14,以及每次执行完循环体后对循环变量进行的操作——LEDPIN++,这意味着变量的值加一。 如有必要,可以轻松更改 for 循环的参数。

运算符括号中的循环体遵循条件。 在第一种情况下(在 setup() 函数中),它由一行组成,该行将执行六次,LEDPIN 值从 8 到 13。在第二种情况下(在 Loop() 函数中),循环语句指定一个由三行组成的序列,使用相同的变量值执行六次。

任何系统中除了控制外部设备外,还需要接收来自各种传感器的信息。 如果没有它们,即使是最复杂的机器人也只是一个发条玩具,无法根据外部条件改变其行为。

电源电压为 5 V,在 Arduino UNO 中,微控制器的数字输入保证被视为高于 +3 V 的逻辑高电压(对应于逻辑单元),并且逻辑低(对应于逻辑零) - 小于 +1,5 V 的电压 中间值(包括输入未连接到任何地方时)给出不可预测的、混乱变化的结果,具体取决于微控制器实例、其电源电压、温度和其他因素。 因此,希望数字输入始终具有已知的高或低逻辑电平的电压。

最简单的传感器是一个没有固定的普通按钮,连接如图所示。 4 电路连接到 Arduino 板的外部引脚之一,在本例中为 D7。 当松开 SB1 按钮时,微控制器输入端的电压电平将为低电平(电阻 R1 将提供),按下时将为高电平。 如果改变按钮和电阻的位置(图 5),那么电平也会改变位置。 现在,当按钮松开时,电阻R1将提供高电平,按下它将设置低电平。

阿杜诺。 数字 I/O 操作
米。 4、传感器连接图

阿杜诺。 数字 I/O 操作
米。 5、传感器连接图

电阻R1的阻值不宜太小,因为按下按钮时流过它的电流会消耗电源,降低器件的效率。 对于台式计算机或主电源供电的情况,这并不是那么重要,但对于 Arduino 电池版本,电阻器 R1 的低阻值将大大缩短设备可能的电池寿命。

请注意,微控制器具有内部电阻来执行电阻 R1 的功能。 默认情况下它们是禁用的。 然而,要将内部电阻连接到 D2 输入,只需将该行添加到 setup () 函数即可

pinMode(2, INPUT_PULLUP);

使用表中给出的示例考虑数字输入。 当您按下连接到引脚 D4 的按钮时,13 个程序会熄灭连接到引脚 7 的 LED。 它基于条件运算符

if (健康)状况)

{

/*满足条件时的动作*/

}

其他

{

/*条件不满足时的动作*/

}

表4

阿杜诺。 数字 I/O 操作

它用于根据是否满足其中指定的条件来选择操作。 如果不满足条件则无需执行任何操作,则可以省略 else {...} 片段。 条件语句的使用赋予程序灵活性。 根据外部传感器的状态,它们会改变程序的顺序以及配备微控制器的设备的行为。

实际上检查按钮的状态是由逻辑运算符执行的

数字读取(但)= 高

在这种情况下,它将读取按钮所连接的 BUT 引脚状态的函数返回的值与逻辑常量 HIGH 进行比较,如果相等,则取值 TRUE(真),否则取值 - FALSE (错误的)。 请注意,相等测试操作由连续的两个等号表示。 等号表示给变量赋值的操作。 不要混淆它们,这会导致难以发现的错误。

使用刚刚考虑的程序示例,很容易看出延迟()函数的不准确使用会导致什么结果。 如果您“取消注释”(删除前面的两条实线)程序倒数第二行中的delay(10000)函数,则在每次执行loop()函数体之后,程序将等待10秒,然后再继续其执行工作。 当然,这段时间里所有的按钮按下都会被忽略。

Arduino 通过串行接口与个人计算机通信的能力非常有用。 它不仅可以用于将程序下载到单片机,还可以在程序执行过程中进行双向信息交换。 通过这个接口,Arduino可以将采集到的信息传输到计算机进行复杂的处理或存储,并从中接收命令和初始数据。 两个微控制器设备也可以通过这种方式进行交互。 微控制器的串口使用板上的数字引脚D0和D1,因此当通过串口建立和使用通信时,它们不能用于其他用途。

例如,考虑表中所示的程序。 5,它将有关输出D12的状态的信息发送到计算机。 如果其电平为高电平,则程序向计算机发送符号代码H,如果为低电平,则向计算机发送符号代码L。任何可以与计算机COM端口配合使用的程序都可以接收此信息。 Arduino IDE 有一个内置的串行端口监视器,允许计算机显示从 Arduino 板接收到的文本消息并发送用户在计算机键盘上键入的消息。

表5

阿杜诺。 数字 I/O 操作

setup() 函数中的 Serial.begin(9600) 行初始化微控制器的串行端口并将波特率设置为 9600 波特。 您还可以设置其他标准​​波特率:1200、2400、4800、9600、19200、38400、57600 或 115200 波特率。 在这种情况下,微控制器中设置的速度必须与计算机或其他设备的 COM 端口配置的速度相匹配,必须与之交换信息。 确保可靠接收信息的允许速度取决于将 Arduino 连接到计算机的电缆长度。 例如,使用1,8 m长的标准USB电缆,即使以115200波特的速度,计算机也会从Arduino接收信息。 而如果在这根电缆上添加一根五米长的延长线,允许的速度就会下降到 4800 波特。

Seri-al.print()函数向串口发送信息,其中括号中表示要发送Send值的变量名称,或者要传输的字符串。 为了与变量名区分开来,字符串用引号引起来。 此 Serial.println() 函数有一个修改。 它的不同之处在于,在传递了括号中的信息(如果有)后,它会用回车符和换行符对其进行补充。 开始一个新行和给定字符串中的字符组合。

使用上述程序,可以很容易地确保,如果没有外部信号施加到配置为输入的微控制器输出,则其状态可以是任意的,并且在操作期间随机变化。 您还可以确定电压的实际值,微控制器不再将其视为低逻辑电平,而是开始将其视为高电平。

接下来,考虑一个程序(表 6),该程序根据通过串行端口从计算机接收的命令打开和关闭板上的 LED。 应该记住,信息是通过串行端口以字节为单位传输的。 串行端口接收器独立于微控制器的处理器运行,接收这些字节并将它们存储在其 64 字节缓冲区中。

6表。

阿杜诺。 数字 I/O 操作

为了让程序确定缓冲区中是否有接收到的字节,有一个 Serial.available() 函数返回它们的数量。 如果是,则程序使用串口。 read() 从缓冲区读取一个字节并将其值(接收到的字符代码)分配给 C char 变量。 接下来,条件语句将代码与模式进行比较,如果匹配,则打开或关闭 LED。

您可以使用用于接收信息的同一串行端口监视器发送命令。 在其窗口的上部(图 6)有一行用于输入传输的字符。 从键盘输入符号或其序列后,按“提交”屏幕按钮。 在 Arduino 板上,“Rx”LED 应短暂闪烁,表明微控制器已接收到信息。 当然,手动传输代码是一种简单的方法,但远不是最好的管理方法。 通常,为此编写专门的计算机控制程序。

阿杜诺。 数字 I/O 操作
米。 6.程序窗口

因此,使用Arduino微控制器板,您可以相对轻松地创建一些简单的电子设备。 如果我们仅限于数字输入输出,那么这些可以是自动灯光效果、最简单的防盗警报、带有数字传感器的各种参数的仪表。 而且,很容易使设备与计算机进行交互。 当然,Arduino 的功能远不限于本文中描述的功能。 该板还可以处理模拟信号,这将在稍后讨论。

文章中提到的 Arduino 程序可以从 ftp://ftp.radio.ru/pub/2016/08/diginout.zip 下载。

作者:D. Lekomtsev

查看其他文章 部分 业余无线电设计师.

读和写 有帮助 对这篇文章的评论.

<< 返回

科技、新电子最新动态:

世界最高天文台落成 04.05.2024

探索太空及其奥秘是一项吸引世界各地天文学家关注的任务。在高山的新鲜空气中,远离城市的光污染,恒星和行星更加清晰地揭示它们的秘密。随着世界最高天文台——东京大学阿塔卡马天文台的落成,天文学史上翻开了新的一页。阿塔卡马天文台位于海拔5640米,为天文学家研究太空开辟了新的机遇。该地点已成为地面望远镜的最高位置,为研究人员提供了研究宇宙中红外波的独特工具。虽然海拔高,天空更晴朗,大气干扰也更少,但在高山上建设天文台却面临着巨大的困难和挑战。然而,尽管困难重重,新天文台为天文学家开辟了广阔的研究前景。 ... >>

利用气流控制物体 04.05.2024

机器人技术的发展不断为我们在各种物体的自动化和控制领域开辟新的前景。最近,芬兰科学家提出了一种利用气流控制人形机器人的创新方法。这种方法有望彻底改变物体的操纵方式,并为机器人领域开辟新的视野。利用气流控制物体的想法并不新鲜,但直到最近,实施这些概念仍然是一个挑战。芬兰研究人员开发了一种创新方法,允许机器人使用特殊的空气喷射作为“空气手指”来操纵物体。气流控制算法由专家团队开发,基于对气流中物体运动的深入研究。使用特殊电机执行的空气喷射控制系统使您无需借助物理手段即可引导物体 ... >>

纯种狗生病的频率并不比纯种狗高 03.05.2024

照顾宠物的健康是每个狗主人生活的重要方面。然而,人们普遍认为纯种狗比混种狗更容易感染疾病。德克萨斯兽医和生物医学科学学院的研究人员领导的新研究为这个问题带来了新的视角。狗老化项目 (DAP) 对 27 多只伴侣犬进行的一项研究发现,纯种狗和混血狗患各种疾病的可能性通常相同。尽管某些品种可能更容易感染某些疾病,但两组之间的总体诊断率实际上相同。狗衰老项目的首席兽医基思·克里维博士指出,有几种众所周知的疾病在某些狗品种中更为常见,这支持了纯种狗更容易患病的观点。 ... >>

来自档案馆的随机新闻

李维斯的智能夹克 05.12.2018

许多人可能不得不至少有一次发现自己在到达工作地点或其他地方时发现自己把智能手机忘在家里了。 为了防止这种情况发生,服装制造商 Levi's 与 Google 一起为该品牌的“智能”夹克推出了一项新功能,该功能是 Jacquard 项目的一部分。 它被称为Always Together,在英语中意为“永远在一起”。

Always Together 功能是自动的,每当位于夹克上的传感器与绑定的智能手机保持一定距离时,都会包含指示灯和振动。 通知也会发送到智能手机,因此业主无需浪费时间在公寓周围搜索设备或手动打开“查找您的手机”模式。

Jacquard 设计的第一款产品于 2017 年 350 月上市销售,一年多前。 这是李维斯 Commuter Trucker Jacket,一款售价 XNUMX 美元的“智能”牛仔夹克,主要针对骑自行车的人。 得益于由谷歌先进技术和项目 (ATAP) 开发的缝在织物中的微传感器,用户可以控制多媒体播放器或导航应用程序等。 Jacquard 项目不断完善,未来平台的能力将得到扩展。

其他有趣的新闻:

▪ 激光将导弹带离目标

▪ 每个人都可以使用夜视仪

▪ 汽车通过指纹识别车主

▪ FlixBus 的太阳能电池板

▪ Infineon 1EDN7511B 和 1EDN8511B 单通道 MOSFET 驱动器

科技、新电子资讯

 

免费技术图书馆的有趣材料:

▪ 该网站的部分伟大科学家的传记。 文章精选

▪ 文章 权利 - 不给予,权利 - 索取。 流行表达

▪ 文章 可以计算步数的蚂蚁住在哪里? 详细解答

▪ 文章波波卡特佩特火山。 自然奇迹

▪ 文章 HF 天线的轮廓。 无线电电子电气工程百科全书

▪ 文章探测器接收器的改进。 无线电电子电气工程百科全书

留下您对本文的评论:

Имя:


电子邮件(可选):


点评:





本页所有语言

主页 | 图书馆 | 用品 | 网站地图 | 网站评论

www.diagram.com.ua

www.diagram.com.ua
2000-2024