如何将Arduino的ino文件分解成多个.h和.cpp工程文件

如何将Arduino的ino文件分解成多个.h和.cpp工程文件

当用Arduino做复杂工程项目时,程序难免会变得很大。这时候要修改个别参数或函数的时候会变得麻烦,简而言之,项目程序管理难度增高了,程序代码维护会变得困难。这时候,就产生了将一个ino文件分解成多个功能相对独立的源文件,这样就便于针对性的管理代码了。

1. 需要做的准备

不是所有的代码都方便分解成多个cpp文件进行管理的,特别是编程时想到哪编到哪的,代码会异常的凌乱。这意味着,里面的函数关系,逻辑嵌套,变量使用等都是极度凌乱的。这样的代码很难分解开来。因此,如果着手做的是一个相对大的项目,一开始便要有整体规划代码的意识。

  • 一是以功能需求对应各个子函数,尽量一个函数只完成一个功能,避免功能上的嵌套;
  • 二是变量定义要清晰。
    在对整体的代码有了比较清晰的规划后,便可以着手分解代码了。

2.功能函数代码的分解

首先,你需要在原来工程文件夹下新建一个头文件,如 config.h,然后将Arduino的硬件接口定义放在这里面。然后,按照功能划分,分别建立各个功能的cpp文件,如 motion.cpp 文件中放置定义了各种运动的函数。然后将各个函数的声明写到 config.h 中。(原来一个ino文件时,软件会自动加函数声明,但现在需要自己加了)如:void trun_left(int, int); 。其他各种功能也是如此。但个函数都划分成多个cpp文件后,就要来处理全局变量的问题了。

3.全局变量的声明

因为在一个地方定义的变量很可能在其他地方使用,因此,全局变量就很关键了。原涞单个ino文件时,只要在 setup() ,上面定义的变量都默认是全局变量,但现在不行了,需要自己在声明。操作方式如下:

  • 在任一cpp中定义你需要的变量,建议定义在最关键的地方。如在motion.cpp中定义了int speed=255; ,而这个变量在其他cpp文件中也要使用到,所以第二步如下:
  • 在config.h 文件中对这个变量进行声明,extern int speed; 这可以跟函数声明一样理解,在这里声明后,在其他地方就可以使用了。
  • 不要想当然的在 config.h 中先定义在声明,这样编译不会出错,但在链接时会出错,显示出现重复定义。(别问我问什么,我这么干失败了)

通过在cpp中定义变量,在头文件中声明该变量的方式便可实现全局变量的使用了。

4. 必要的步骤

在完成上面的步骤后,你还需要除了ino文件外的各个文件里都包含 #include"Arduino.h",否则程序里的HIGH,LOW,OUTPUT,pinMode之类的将无法识别。此外,你的各个cpp文件应该加上头文件 #include“config.h”,不用<>,而用双引号的原因是尖括号引用的是标准库,而这里是自定义的头文件等。最后,你也要在ino文件中包含头文件 #include"config.h"。 ino文件以及头文件中都无需包含cpp文件。

5. 程序的管理

经过上述步骤后,你的程序将由一个包含了setup(),loop()函数的ino文件,一个头文件config.h, 以及许多实现各种功能的cpp文件。 ino文件就是你的主程序了,你想要实现的主干逻辑写在这里面。它通过调用各个cpp里函数来实现你的功能。头文件则包含了你所使用的Arduino的各个接口定义,所有函数的声明,以及全局变量的声明。 而cpp文件则是按照功能类别,将许多子函数集中在一起的源文件。

OVER~

  • 43
    点赞
  • 130
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
有了这些资料集合,单片机开发差不多全了 不能错过的Arduino图书.pdf Arduino一试就上手(第2版).pdf Arduino与树莓派哪个是更适合 - 推酷.pdf Arduino从基础到实践.pdf ARDUINO开发实战指南 AVR篇.pdf Arduino开源设计_吴义满.pdf ARDUINo玩转电子制作.pdf Arduino电子设计实战指南.零基础篇.pdf Arduino高级开发权威指南(原书第2版).pdf 深入浅出AVR单片机.pdf Arduino - Graph.pdf e络盟针对工业物联网应用供应一体_省略_angOHGreen开源硬件平台_.pdf Marvell开源KinomaJS应用框架加速物联网行业成长_.pdf wifi模块简单使用教程,如何将数据发送到电脑(esp8266 arduino库的使用) wifi.pdf [ARDUINO.ANDROID互动智作].〔美〕Simon.Monk.科学出版社.扫描版(简体).pdf [ARDUINO技术内幕].[美].Dale.Wheat.翁恺.译.扫描版.pdf 用Arduino和Yeelink打造智能家居.pdf 中文语音引擎EKHO在Raspberrypi上的应用实例_薛凯.pdf 以大数据与物联网为基础的仿生设计方法_陈阳.pdf 华为推出基于开源的物联网操作系统_.pdf 在物联网时代_开源该怎么玩_本刊编辑部.pdf 基于Wi_FiSoC的物联网平台设计_纪亚萍.caj 基于开源硬件和物联网云平台的远程控制应用_林巧生.pdf 基于微信和Arduino家用物联网系统开发_薛毛毛.pdf 挑战树莓派:谁才是Geek最爱的开发板.pdf 极客DIY:利用Arduino制作智能家居系统 - FreeBuf.pdf 爱上Arduino.pdf 物联网革命的三个阶段(联接未联接的,生成智能的联接,复杂子系统的自治).pdf

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值