0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用Arduino函数简化代码

星星科技指导员 来源:嵌入式计算设计 作者:Jeremy S. Cook 2022-08-16 09:23 次阅读

Arduino 板和 Arduino IDE 非常适合创建可以激活 LED、读取传感器、激活伺服或任何数量的独特物理计算应用程序的小代码片段。此类操作通常开始时很简单——例如,让计时器上的 LED 闪烁——但随着程序的扩展和程序员技能的提高,最终会变得相当复杂。

组织扩展代码的一种出色技术是使用函数,即可以根据需要从程序的其他部分(例如通过主循环)调用的代码片段。对于有经验的程序员来说,这种技术可能已经过时了,但对于那些从其他学科进入 Arduino 的人来说,尽早接受函数范式通常会对你有好处。

声明一个函数

在最基本的形式中,额外函数看起来几乎与您在开始新草图时在第 1 行和第 6 行看到的设置和循环函数一样(图 1)。这些函数需要在另一个函数之外声明,并且具有唯一的名称。事实上,主循环函数的简单复制/过去/修改可用于在您的代码中创建一个新函数。

poYBAGL68dOAaEKlAACCXUp6_JI398.png

图 1. 新功能 copypasta。

调用函数,继续

当然,声明一个从不被调用且不做任何事情的函数纯粹是浪费空间,所以让我们让它做一些有趣的事情(图 2)。下面的示例基本上重新格式化了 Arduino Blink 草图以将闪烁放入一个函数中,并添加一个串行输出以让您知道它“延迟闪烁打开和关闭”。

pYYBAGL68dmAd3UJAACoptgTOVQ871.png

虽然这对简化代码没有任何作用,但如果您想在主循环中的多个点执行相同类型的闪烁/响应操作,请考虑如何简化事情。无需编写 5 行代码,您只需使用 blinkAndTalk(); 调用新函数。

不需要太多用处就能看出这种简化是如何叠加起来的,尤其是在函数更复杂的情况下。这种代码分段还有助于在其他程序中重用代码,因为您可以根据需要在那里复制/粘贴。在 Arduino IDE 中,将函数放在最后很好,但如果您使用不同的环境(例如 PlatformIO),顺序可能很重要。

函数返回值

除了将代码简化为易于重用的块外,函数还可以返回一个值。Arduino.cc 提供了如何执行此操作的示例,将 myMultiplyFunction 称为 k = myMultiplyFunction(i, j);。这里的括号不是空的,而是将变量传递给函数本身,并且 k 由返回结果设置;函数中的行(图 3)。

pYYBAGL68d-AIcEnAACX8x_iNLg323.png

图 3.来自 Arduino 示例的代码。

另一种传递值的方法是在函数中设置一个全局变量,它可以在主循环或任何你需要结果的地方使用。出于多种原因,包括生成更复杂的代码以及使这些函数更难重用,使用 return 是这里更好的选择。如果您很好奇,下面显示了如何做到这一点的示例:

pYYBAGL68eaAUfmLAACfahn3UiY284.png

图 4. 可能,但通常不推荐

一旦您准备好将几行代码转移到编程上更有趣的应用程序中,请记住函数是您的朋友。他们在最初设置时会花一些心思,但随着事情变得更加复杂,他们可以支付巨额红利。

我最近写了一段代码,其中一小部分如下所示,接近 300 行。然而,主循环在括号内只有 4 行,主要是为了调用一些单独的函数。老实说,我应该将其进一步分解为功能块,从而可能会减小程序的大小并为自己省去一些麻烦。规划在这里有很长的路要走。

pYYBAGL68eyAPaIrAABcsioxRVM434.png

图 5. 对于主循环中的代码行(注释省略)

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 传感器
    +关注

    关注

    2550

    文章

    51000

    浏览量

    752960
  • led
    led
    +关注

    关注

    242

    文章

    23235

    浏览量

    660475
  • Arduino
    +关注

    关注

    188

    文章

    6468

    浏览量

    186909
收藏 人收藏

    评论

    相关推荐

    HAL库在Arduino平台上的使用

    ,适合于快速原型开发和教育。HAL(硬件抽象层)库是一种在Arduino平台上使用的软件库,它提供了一种标准化的方式来访问硬件功能,使得开发者可以编写更通用、更可移植的代码。 1. 什么是HAL库 HAL库是硬件抽象层库的简称,它是一种软件架构,用于将硬件特定的
    的头像 发表于 12-02 14:04 223次阅读

    面试常考+1:函数指针与指针函数、数组指针与指针数组

    函数是指返回值为指针的函数。语法:返回值类型*函数名(参数列表)。示例代码:#include#includeint*getNumber(inta,intb){in
    的头像 发表于 08-10 08:11 806次阅读
    面试常考+1:<b class='flag-5'>函数</b>指针与指针<b class='flag-5'>函数</b>、数组指针与指针数组

    怎样用Arduino测试锂电池容量

    本文详细介绍了如何用Arduino测量锂电池的容量。并附有电路图和Arduino的程序代码
    的头像 发表于 07-30 09:14 836次阅读
    怎样用<b class='flag-5'>Arduino</b>测试锂电池容量

    能将ESP8266连接到arduino UNO上,使用mesh组网吗?

    现在已将ESP8266连接到了arduino,并且成功驱动,但是有个问题就是组网的问题,想使用mesh,但是还有有些疑问。1、将带有mesh的固件烧录到ESP8266中,就能自动寻找节点了吗?或者是下载mesh的库函数,从arduino
    发表于 07-11 06:46

    鸿蒙TypeScript入门学习第8天:【TypeScript 函数

    函数是一组一起执行一个任务的语句。 您可以把代码划分到不同的函数中。如何划分代码到不同的函数中是由您来决定的,但在逻辑上,划分通常是根
    的头像 发表于 04-03 14:54 412次阅读
    鸿蒙TypeScript入门学习第8天:【TypeScript <b class='flag-5'>函数</b>】

    Arduino Uno R3开发版简化

    本人小白,想把Atmega328p-AU芯片单独拿出来用来控制LED阵列,但Arduino R3开发板的原理图真看不懂!想知道除了328芯片还需要什么以及线路怎么连接,感谢各位大佬!
    发表于 04-02 08:38

    verilog function函数的用法

    Verilog 中被广泛用于对电路进行模块化设计,以简化和组织代码。 本文将详细介绍 Verilog 函数的用法,并探讨函数在硬件设计中的重要性和实际应用场景。 一. Verilog
    的头像 发表于 02-22 15:49 5464次阅读

    内联函数定义 为什么需要内联函数

    inline关键字是C99标准的型关键字,其作用是将函数展开,把函数代码复制到每一个调用处。
    的头像 发表于 02-19 12:20 537次阅读

    arduino控制步进电机代码

    Arduino是一种开放源代码的电路板平台,它可以用于控制各种不同的电子设备,包括步进电机。步进电机是一种电动机,可以通过下达特定的指令来控制每个步进的角度,从而使电机旋转到指定的位置。在本文
    的头像 发表于 02-14 16:29 1993次阅读

    arduino中while循环怎么跳出

    Arduino 是一款开源的硬件平台,广泛应用于各种物联网和嵌入式系统项目。在 Arduino 上编写代码时,循环结构起到了至关重要的作用。而其中的 while 循环更是常用于需要根据特定条件重复
    的头像 发表于 02-14 16:22 2533次阅读

    verilog中函数和任务对比

    在verilog中,函数和任务均用来描述共同的代码段,并且在模式内任意位置被调用,提高代码效率,让代码更加的直观,提高代码可读性。但是在实际
    的头像 发表于 02-12 18:43 877次阅读

    2023年Arduino开放原码报告:持续茁壮的Arduino生态系!

    所谓出钱就是买一片Arduino开发板或是付费订阅Arduino Cloud云端服务,或单纯资金赞助;出力就是撰写Arduino相关的程序并无私的分享程序代码或回报错误或投入翻译等,笔
    的头像 发表于 01-25 16:45 1412次阅读
    2023年<b class='flag-5'>Arduino</b>开放原码报告:持续茁壮的<b class='flag-5'>Arduino</b>生态系!

    如何用Rust过程宏魔法简化SQL函数呢?

    这是 RisingWave 中一个 SQL 函数的实现。只需短短几行代码,通过在 Rust 函数上加一行过程宏,我们就把它包装成了一个 SQL 函数
    的头像 发表于 01-23 09:43 936次阅读
    如何用Rust过程宏魔法<b class='flag-5'>简化</b>SQL<b class='flag-5'>函数</b>呢?

    arduino和单片机的区别比较

    和软件的微控制器平台,它通过一种简化和标准化的方式,使电子开发变得更加容易。Arduino主板上集成了处理器、输入输出引脚、电源供应等电路,能够连接各种传感器和执行器,通过编程进行控制和交互。Arduino的优点在于其使用简单、
    的头像 发表于 01-02 16:18 9675次阅读

    Arduino的功能及其限制

    它在某些方面的限制。 精简而易用的编程环境:Arduino IDE提供了一个友好的编程环境,使得即使没有编程经验的人也可以轻松地开始编写代码。 强大的互联功能:Arduino可以通过各种通信协议(如I2C、SPI、UART)与其
    的头像 发表于 12-21 14:15 1202次阅读