如何将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~

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

  1. 把Qt的界面文件(.ui文件)生成源文件(.h或.cpp)封装成链接库

    前言 在用Qt做开发时,为了方便快速,一般都使用Qt设计师界面类来做界面相关的布局,这个类在当前工程中是没有.cpp或.h文件的,但主类又有引入了这个头文件,点开转到定义或声明时,是打不开的,如下图: ...

  2. xml文件转换成图片_怎样能把PDF文件转换成图片?

    我们的日常生活工作中时常碰到pdf与Excel.Word.ppt和jpg等文件格式的转换,有时候由于工作的需要,要把PDF文件转换成图片.并且现在网上的很多素材都是PDF文件格式的,如果我们想要里面的 ...

  3. 亲测好用的caj文件转换成带目录的文字版PDF文件工具

    参考GitHub上caj2pdf/caj2pdf: Convert CAJ (China Academic Journals) files to PDF. 转换中国知网 CAJ 格式文献为 PDF.佛 ...

  4. java 文件转十六进制_JAVA将文件转成十六进制字符串和十六进制字符串生成文件的方法...

    以下代码以APK文件为例,其他格式的文件方法一样,代码如下: package com.evideostb.billsystem.module.update; import java.io.*; /** ...

  5. 怎么把php的文件链接成html,怎么把动态的php文件转换成静态的html文件,html文件是php文件…...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 生成静态文件除了2楼所说的ob缓存方法之外,还有一种方法就是通过使用模板替换技术实现(正则表达式) header("content-type:t ...

  6. 【PDF转换图片】如何把pdf文件转换成图片?如何把批量pdf文件转换成图片?如何把多目录批量pdf文件转换成图片?如何pdf文件转换成图片不失真不损失清晰度?今天教方法

    在工作中常常需要将PDF转换为图片,好多免费但是图片有水印和功能不全的问题. 还有市面上很多软件知识完成了部分的工作,比如只能单个文件转PDF,那么遇到多文件的就只能挨个转么? 还有转换的格式支持的非 ...

  7. python excel文件转换成字符串_python利用pandas将excel文件转换为txt文件的方法

    python将数据换为txt的方法有很多,可以用xlrd库实现.本人比较懒,不想按太多用的少的插件,利用已有库pandas将excel文件转换为txt文件. 直接上代码: ''' function:将 ...

  8. 计算机文件换成PDF,如何打开或转换PPDF文件

    我们中的文件扩展名为1,别名为0 您可以找到以下问题的答案: .ppdf PPDF文件是Microsoft RMS保护的PDF. 权限管理服务(RMS)是Windows Server附带的用于信息权限 ...

  9. java字节流——把两个视频文件合并成一个,输出为一个新文件

    下面把D盘的两个视频文件合并为一个,并输出为D:\new.mp4 package com.oracle.core;import java.io.File; import java.io.FileInp ...

最新文章

  1. Docker_Swarm集群系统
  2. 11月2日科技联播:销量不及预期苹果市值跌破万亿美元;腾讯表示封杀抖音因微信规则...
  3. BZOJ 1492: [NOI2007]货币兑换Cash [CDQ分治 斜率优化DP]
  4. html 标签 中 的Lang 有什么用
  5. 在 C# 中 (x == X) 何时成立?
  6. 论文研读:Automatic Temporal Segment Detection and Affect Recognition From Face and Body Display
  7. php扩展 zval_copy_ctor,zend api扩展的php对象的autoload工具
  8. JVM-01Java内存区域与内存溢出异常(上)【运行时区域数据】
  9. python3.0与2.0,python3.0与python2.0有哪些不同
  10. 安装linux前分区,安装Linux系统前的准备之磁盘分区
  11. vps没有mysql怎么用商店_如何在本地搞一个小程序的服务器之我没有vps我也很绝望呀...
  12. aws rds监控慢sql_AWS RDS SQL Server –监视数据库实例
  13. Swing 显示良好JPanel保存为图片
  14. Apache Curator入门实战
  15. 洛谷P5300 与或和(全1子矩阵/单调栈)
  16. FindBugs-IDEA图标说明
  17. 四阶段法-交通分布预测方法-算法复现
  18. Django(一)简单的个人博客搭建实战
  19. 灵感分享|10个优秀网站设计实例赏析及原型分享
  20. 如何解决IT公司代码混乱的问题

热门文章

  1. steam账号连接服务器遇到问题,无法预料的服务器浏览器反应 - Steam Support
  2. 百度为何力推直达号?为了移动商业化
  3. SQL SERVE 2008远程连接 提示sqlserver远程主机强迫关闭了一个现有连接
  4. c语言程序设计精髓 第13周练兵题
  5. threw exception [Circular view path [index]: would dispatch back to the current handler URL [/index]
  6. 基于模拟退火优化算法的的并行车间机器优化调度附Matlab代码
  7. 数据结构-C语言代码 day6-栈及其应用
  8. 个人面经整理深信服测开
  9. CNN神经网络猫狗分类经典案例
  10. C语⾔核⼼基础知识之printf