使用Arduino函数简化代码

arduino 板和 arduino ide 非常适合创建可以激活 led、读取传感器、激活伺服或任何数量的独特物理计算应用程序的小代码片段。此类操作通常开始时很简单——例如,让计时器上的 led 闪烁——但随着程序的扩展和程序员技能的提高,最终会变得相当复杂。
组织扩展代码的一种出色技术是使用函数,即可以根据需要从程序的其他部分(例如通过主循环)调用的代码片段。对于有经验的程序员来说,这种技术可能已经过时了,但对于那些从其他学科进入 arduino 的人来说,尽早接受函数范式通常会对你有好处。
声明一个函数
在最基本的形式中,额外函数看起来几乎与您在开始新草图时在第 1 行和第 6 行看到的设置和循环函数一样(图 1)。这些函数需要在另一个函数之外声明,并且具有唯一的名称。事实上,主循环函数的简单复制/过去/修改可用于在您的代码中创建一个新函数。
图 1. 新功能 copypasta。
调用函数,继续
当然,声明一个从不被调用且不做任何事情的函数纯粹是浪费空间,所以让我们让它做一些有趣的事情(图 2)。下面的示例基本上重新格式化了 arduino blink 草图以将闪烁放入一个函数中,并添加一个串行输出以让您知道它“延迟闪烁打开和关闭”。
虽然这对简化代码没有任何作用,但如果您想在主循环中的多个点执行相同类型的闪烁/响应操作,请考虑如何简化事情。无需编写 5 行代码,您只需使用 blinkandtalk(); 调用新函数。
不需要太多用处就能看出这种简化是如何叠加起来的,尤其是在函数更复杂的情况下。这种代码分段还有助于在其他程序中重用代码,因为您可以根据需要在那里复制/粘贴。在 arduino ide 中,将函数放在最后很好,但如果您使用不同的环境(例如 platformio),顺序可能很重要。
函数返回值
除了将代码简化为易于重用的块外,函数还可以返回一个值。arduino.cc 提供了如何执行此操作的示例,将 mymultiplyfunction 称为 k = mymultiplyfunction(i, j);。这里的括号不是空的,而是将变量传递给函数本身,并且 k 由返回结果设置;函数中的行(图 3)。
图 3.来自 arduino 示例的代码。
另一种传递值的方法是在函数中设置一个全局变量,它可以在主循环或任何你需要结果的地方使用。出于多种原因,包括生成更复杂的代码以及使这些函数更难重用,使用 return 是这里更好的选择。如果您很好奇,下面显示了如何做到这一点的示例:
图 4. 可能,但通常不推荐。
一旦您准备好将几行代码转移到编程上更有趣的应用程序中,请记住函数是您的朋友。他们在最初设置时会花一些心思,但随着事情变得更加复杂,他们可以支付巨额红利。
我最近写了一段代码,其中一小部分如下所示,接近 300 行。然而,主循环在括号内只有 4 行,主要是为了调用一些单独的函数。老实说,我应该将其进一步分解为功能块,从而可能会减小程序的大小并为自己省去一些麻烦。规划在这里有很长的路要走。
图 5. 对于主循环中的代码行(注释省略)


反铁磁自旋霍尔效应——局域空间反演破缺之美
监控led补光灯的分类
锤子科技朱海舟称坚果手机断流大多与路由器和基站有关
5G对AR/VR存在的意义
Marvell 在MWC 2019上展示行业领先的网络基础设施解决方案
使用Arduino函数简化代码
机器智能快速发展,人机配合将达到更优的智能水平
选择合适的集成度来满足电机设计要求
从外观上识别内存
华为发布配电物联网等四大解决方案,助力全球能源转型
关于PCB安全间距设计的探讨
canvas基础绘制方法介绍
酸性氯化铜蚀刻液和碱性氯化铜蚀刻液
医疗是否可以因为云计算将业务迁移到云上去
虚拟现实系统的关键技术
什么是防孤岛保护 防孤岛保护案例分析
汽车电子架构的选择反映了不同的设计理念
NokiaX7评测 不负诺粉多年之信仰
蓝牙Mesh为连网装置创造新应用
OpenUSD 全明星:借助 OpenUSD 实现互操作性