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. 对于主循环中的代码行(注释省略)

审核编辑:郭婷

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

    关注

    2573

    文章

    54363

    浏览量

    785790
  • led
    led
    +关注

    关注

    243

    文章

    24433

    浏览量

    687267
  • Arduino
    +关注

    关注

    190

    文章

    6514

    浏览量

    195909
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    使用 LinkBoy 将程序导出为 C 语言代码并烧录至 Arduino ESP32 开发板

    以下是使用 LinkBoy 将程序导出为 C 语言代码并烧录至 Arduino ESP32 开发板的详细步骤指南: 一、准备工作 ✅ 硬件需求: 项目 要求 开发板 Arduino ESP32(支持
    发表于 10-16 12:41

    如何用Arduino Nano/UNO R3开发板给另一个Arduino IDE不能下载的Arduino Nano/UNO R3开发板重新烧录引导程序bootlaoder

    本文介绍了如何用能够Arduino IDE下载的Arduino Nano/UNO R3开发板给另一个Arduino IDE不能下载的Arduino Nano/UNO R3开发板重新烧录
    的头像 发表于 08-08 20:16 3054次阅读
    如何用<b class='flag-5'>Arduino</b> Nano/UNO R3开发板给另一个<b class='flag-5'>Arduino</b> IDE不能下载的<b class='flag-5'>Arduino</b> Nano/UNO R3开发板重新烧录引导程序bootlaoder

    详解hal_entry入口函数

    hal_entry函数开始执行。我们直接打开“srchal_entry.c”文件,在hal_entry函数里面编写我们的代码
    的头像 发表于 07-25 15:34 1653次阅读

    【Milk-V Duo S 开发板免费体验】Milk-V DuoS之使用Arduino开发小核

    Milk-V DuoS之使用Arduino开发 Arduino 是一个很流行的开源硬件平台,具有简洁性、易用性和开放性等优点。它提供了丰富的库函数和示例代码,使得即使对于没有编程经验的
    发表于 07-17 21:01

    深入理解C语言:函数—编程中的“积木块”艺术

    在编程的世界里,函数就像建筑中的“积木块”——它们是构建复杂程序的基石。通过灵活组合这些模块,开发者能打造出功能强大且结构清晰的代码函数之所以成为C语言的核心,正是因为它解决了编程中的三大关
    的头像 发表于 06-30 17:26 1479次阅读
    深入理解C语言:<b class='flag-5'>函数</b>—编程中的“积木块”艺术

    突破LuatOS开发瓶颈:三个二次开发必备知识揭秘!

    。   一、匿名函数 在Lua代码里面,经常看到没有名字的函数。 这种函数定义之后,要么马上运行,要么作为另一个函数的返回值赋给其他变量,所
    的头像 发表于 06-23 15:05 254次阅读
    突破LuatOS开发瓶颈:三个二次开发必备知识揭秘!

    免费分享Arduino入门+进阶(全套例程+书籍)

    Arduino是一款开源电子原型平台,由硬件(单片机开发板)和软件(编程环境)组成,旨在让非专业用户也能轻松入门电子制作和编程。它的核心思想是简化硬件开发,通过直观的编程和模块化设计,让用户快速实现
    的头像 发表于 05-22 11:40 771次阅读
    免费分享<b class='flag-5'>Arduino</b>入门+进阶(全套例程+书籍)

    下一代物联网:芯科科技和Arduino借助边缘AI和ML简化Matter设计和应用

    Silicon Labs(芯科科技)和Arduino宣布建立合作伙伴关系,旨在通过Arduino Nano Matter开发板(基于芯科科技的MGM240系列多协议无线模块)的两阶段合作来简化Matter协议的设计和应用
    的头像 发表于 05-19 11:15 549次阅读
    下一代物联网:芯科科技和<b class='flag-5'>Arduino</b>借助边缘AI和ML<b class='flag-5'>简化</b>Matter设计和应用

    《ESP32S3 Arduino开发指南》第二章 Arduino基础知识

    setup() {// 在这里填写setup函数代码,它只会运行一次} void loop() {// 在这里编写loop函数代码,它会不断重复运行}
    发表于 05-13 09:28

    函数指针的六个常见应用场景

    函数指针在嵌入式开发中有着广泛的应用,它让代码更加灵活,减少冗余,提高可扩展性。很多时候,我们需要根据不同的情况动态调用不同的函数,而函数指针正是实现这一需求的重要工具。本文将介绍六个
    的头像 发表于 04-07 11:58 1117次阅读
    <b class='flag-5'>函数</b>指针的六个常见应用场景

    分析C语言代码结构的设计问题

    项目中遇到的,我拿过来给简化了一下。 其实这样的代码可能会导致内存泄漏,如果第一个 malloc 申请成功,第二个 malloc 申请失败,直接 return -1 退出函数,就会导致前面申请的内存没有释放,长期运行,极有可能导
    的头像 发表于 02-11 09:31 658次阅读

    代码与传统开发的区别 低代码与无代码开发的区别

    在软件开发领域,传统开发、低代码开发以及无代码开发是三种不同的开发方式,每种方式都有其独特的优势和适用场景。 一、低代码开发与传统开发的区别 低代码开发是一种新兴的应用程序开发方法,旨
    的头像 发表于 01-31 10:48 1047次阅读

    用于 SPI 绝对编码器的 Arduino 示例代码

    作者:Damon Tarry, Design Applications Engineer, Same Sky 本 Arduino 示例代码教程旨在为用户提供一个坚实的起点,以便通过串行外设接口
    的头像 发表于 01-26 21:35 1285次阅读
    用于 SPI 绝对编码器的 <b class='flag-5'>Arduino</b> 示例<b class='flag-5'>代码</b>

    C语言如何处理函数的返回值

    当你在函数的最后写上 return 0 的时候,它是如何返回给调用函数的? 比如 test 函数,为了待会更好的看懂汇编代码,我写成了 return 1234。 处理
    的头像 发表于 01-16 09:21 747次阅读

    如何使用Arduino实现CAN总线通信呢

    CAN(Controller Area Network)总线是一种常用于汽车和工业控制系统的串行通信协议,以其高可靠性和实时性而闻名。Arduino,作为一种流行的开源微控制器平台,可以通过附加
    的头像 发表于 12-23 09:06 2805次阅读