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

审核编辑:郭婷

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

    关注

    2568

    文章

    53323

    浏览量

    770466
  • led
    led
    +关注

    关注

    242

    文章

    23949

    浏览量

    677014
  • Arduino
    +关注

    关注

    190

    文章

    6502

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    详解hal_entry入口函数

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

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

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

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

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

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

    Silicon Labs(芯科科技)和Arduino宣布建立合作伙伴关系,旨在通过Arduino Nano Matter开发板(基于芯科科技的MGM240系列多协议无线模块)的两阶段合作来简化Matter协议的设计和应用
    的头像 发表于 05-19 11:15 ?350次阅读
    下一代物联网:芯科科技和<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 ?666次阅读
    <b class='flag-5'>函数</b>指针的六个常见应用场景

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

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

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

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

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

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

    HAL库在Arduino平台上的使用

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

    基于Arduino的串口通信项目

    基于Arduino的串口通信项目涉及多个方面,包括硬件连接、软件编程、串口参数配置等。 一、硬件准备 Arduino开发板 :确保你有一块Arduino开发板,如Arduino Uno
    的头像 发表于 11-22 09:24 ?2395次阅读

    SUMIF函数与SUMIFS函数的区别

    SUMIF函数和SUMIFS函数都是Excel中用于条件求和的函数,它们可以帮助用户根据特定的条件对数据进行求和。尽管它们的基本功能相似,但在使用场景和功能上存在一些差异。以下是对这两个函数
    的头像 发表于 10-30 09:51 ?8075次阅读

    Python常用函数大全

    在 Python 世界里,有一些宝藏函数和模块,它们可以让你编程更轻松、代码更高效。这篇文章将带你一一认识这些神器,让你的开发生活瞬间轻松不少!
    的头像 发表于 10-27 17:20 ?1035次阅读

    arduino(1)--ESP8266配置

    硬件准备 首先需要准备一个开发板,这里我准备的是淘宝购买的兼容arduino的ESP8266模块。 arduino配置 我使用的是arduino来编程实现,故需要下载对应的库文件,打开
    发表于 09-06 11:00

    分享在arduino 单片机中浮点数转换位数不够,精度丢失的解决办法

    arduino中由于硬件限制,浮点数只有2位小数。但经过这个函数处理可以达到7位
    的头像 发表于 08-27 14:34 ?1340次阅读